![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
form id、nameの番号振りなおし
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHPでURLにジャンプするには?
-
コンボボックス(プルダウン)...
-
処理後のページ内移動について
-
SQLインジェンクション対策法を...
-
phpでのselect値の取得・表記に...
-
formの外にあるチェックボック...
-
変数が表示されない。
-
このプログラムの改善点を教え...
-
チェックボックスのvalueを連結...
-
Submit(送信ボタン)を押した...
-
PHP+MySQLの「データ...
-
functionとclassの使い分け
-
フォームで作った送信ボタンが...
-
phpで読み込んだcsvが文字化け...
-
フォームでの記入項目
-
同ページへの通信
-
変数の書き方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JQUERY,PHP,whlie内のinput送信...
-
PHPとMySQL 検索フォームを作り...
-
"/". $valueptr . "/", の”/”は...
-
form id、nameの番号振りなおし
-
カスタムフィールドテンプレー...
-
PHP 余分に出来たタグを消したい
-
フォームの状態やGETのURLは保...
-
PHPでURLにジャンプするには?
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
-
検索時の選択内容を保持する方法
-
DBの値をチェックボックスに反...
-
laravelを利用してコントロール...
-
ラジオボタンをsessionで使いたい
-
パラメーターを隠す
-
PHPで画像の渡しが上手く行きま...
-
フォームへの前回入力値をクリ...
-
フォーム送信後の更新ボタンで...
-
VBA で、スペースを含むファイ...
おすすめ情報