
PHP初心者です。
ただ今カレンダーを作成しております。
コードは以下です。
<?php
$d=isset($_GET['d'])? $_GET['d']:date("Y-n-d");
list($year,$month,$day)=explode("-",$d);
$prev=date("Y-n-d",mktime(0,0,0,$month-1,1,$year));
$next=date("Y-n-d",mktime(0,0,0,$month+1,1,$year));
$timestamp = mktime(0,0,0,$month,1,$year);
$fd=date("w",$timestamp);
$ld=date("t",$timestamp);
?>
<table>
<tr>
<th><a href="?d=<?php echo$prev; ?>">←</a></th>
<th colspan="5"><?php echo ("<h1>".$year."年".$month."月</h1>"); ?></th>
<th><a href="?d=<?php echo$next; ?>">→</a></th>
</tr>
<tr>
<th class="sun">日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th class="sat">土</th>
</tr>
<tr>
<?php
$offset = $fd; //
while($fd--){
//$y ++; // 空セル文曜日を増やす
$s .= "<td></td>\n";
}
for($i=1; $i<=$ld; $i++){
$tmp = $offset + $i; //$tmpを$offset(1日までの空セル) と $i(31日)を足したものにする
$s.="<td>$i</td>\n"; //$sに日数とセルを追加
if($tmp % 7 ==0){ //$tmp(空セル+その月の日数)を7で割りあまりが0すなわち土曜日まできたら
$s.= "</tr>\n<tr>\n"; //</tr>で改行をいれる
}
}
$y=0;
for($i=1; $i<=$tmp; $i++){ //$tmp(空セル+その月の日数)になるまで
if($y % 7 == 0){ //7倍数になったら0にリセットする
$y = 0;
}
$y++; //リセットされた残りの曜日
}
$r=7-$y;
$y=0;
while($r--){
$s.='<td></td>';
}
for($i=1; $i<=$tmp; $i++){
if($tmp % 7 == 0){
$s.="</table>\n";
break;
}else{
$s.="</tr></table>\n";
break;
}
}
echo $s;
?>
一見出来ているようですが、最終日が土曜日になると余分な<tr>が入ってしまいます。
原因として、
if($tmp % 7 ==0){
$s.= "</tr>\n<tr>\n";}
と入れてあり、土曜日に7がくる(7で割り切れる数字で終わる)であるとは理解しているのですが、どうすれば、「最終セルに最後の日が来たときに<tr>をいれない」といった命令の仕方がわかりません。
素人ですので、分かりやすく解説していただけると嬉しいです。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
答えは簡単!
<tr> と </tr> を同時に入れなければいいのです。
ご自身で理解されている問題のポイントを
if ($tmp % 7 == 0 ) {
$s.= "</tr>\n";
}
として、
その前の $s.="<td>$i</td>\n"; の前に
if ($tmp % 7 == 1) {
$s.= "<tr>\n";
}
を書き足すと解決します。
この回答への補足
ご回答ありがとうございます。
とても参考になったのですが、これだと1日が日曜日だった場合に、空の<tr>が入るため、
・・・
<th class="sat">土</th>
</tr>
<tr>
<tr>
・・・
となってしまいます。
この場合でも、余分な<tr>をいれない方法はございますでしょうか?
1÷7のあまりって1なんですね。理解に苦しみます(>_<)
t_ohta様
あれから、QAサイトで教えていただき解決することが出来ました。
ご回答いただきありがとうございました。
ちなみに
if($tmp % 7 ==0){
$s.= "</tr>\n"; // 土曜だったら行を閉じる
if ($i < $ld) {
$s .= "<tr>\n"; // 最終日以外だったら次行の開始を準備
}
}
に記述を書き換えると解決いたしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページの画面文字を濃く...
-
ホームページを作ろうと思いま...
-
ホームページビルダーを複数の...
-
教えて!goo でいただいた回答を...
-
無料のホームページを作成でき...
-
マウスオーバーすると色が変わ...
-
ホームページを趣味で作ろうと...
-
古いウェブ作成ソフト使ってる...
-
XREA使用で作成したHTMLファイ...
-
新規サイトをGoogle検索に出る...
-
無料でホームページを作成でき...
-
【ホームページ作製】HPのWebペ...
-
hpの画像の公開
-
ホームページ作成に伴い、元デ...
-
会社のホームページをご自身で...
-
クリック時に生成したものを削...
-
ホームページ
-
ホームページビルダーで作った...
-
ホームぺージ作り
-
エクセルの数式について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
"/". $valueptr . "/", の”/”は...
-
フォームの状態やGETのURLは保...
-
PHPとMySQL 検索フォームを作り...
-
form id、nameの番号振りなおし
-
文字・URLの切替えに関してです。
-
PHPでURLにジャンプするには?
-
HTMLで前の画面に戻る時、入力...
-
配列をhiddenで
-
検索時の選択内容を保持する方法
-
laravelを利用してコントロール...
-
DBの値をチェックボックスに反...
-
フォーム送信後の更新ボタンで...
-
フォームボタンを押すたびに数...
-
テキストリンクをPOST送信したい
-
セッションを使わずに遷移先画...
-
PHPで、ボタンを押すと同じペー...
-
同じページでフォームデータを...
-
ラジオボタンをsessionで使いたい
-
複数 selectフォームから今回on...
-
POSTを使わずに値を渡す方法
おすすめ情報