• ベストアンサー

カレンダーの作り方

PHPで簡単なカレンダーを作成しようと思っています。やりたいことは下のようなカレンダーを作成したいです。forループで表自体は作れるのですが、最後の行に何もデータ(日付)が入っていない場合は最後の行は表示しないという処理にしたいです。この場合、31より後ろの4つのセルはあっても問題ありません。あくまで、最後の行が空の場合は最後の行は表示しない、もしくは表示させないという処理です。 これだとforループで表を作るには難しいような気がしますが、何かよいアイディアをご教授ください。 ┏━━━━━━━━━━━━━┓ ┃********2006年10月********┃ ┣━┳━┳━┳━┳━┳━┳━┫ ┃Su┃Mo┃Tu┃We┃Th┃Fr┃Sa┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃01┃02┃03┃04┃05┃06┃07┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃08┃09┃10┃11┃12┃13┃14┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃15┃16┃17┃18┃19┃20┃21┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃22┃23┃24┃25┃26┃27┃28┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃29┃30┃31┃--┃--┃--┃--┃ ┣━╋━╋━╋━╋━╋━╋━┫ ┃--┃--┃--┃--┃--┃--┃--┃ ┗━┻━┻━┻━┻━┻━┻━┛

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

日数分表示した時点で終わればいいというやり方で <?php function calender_table($year, $month) { //その月の1日の曜日を求める(0-6) $timestamp = mktime(0, 0, 0, $month, 1, $year); $day_of_week = date("w", $timestamp); //月の日数を求める。 $days = date("t", $timestamp); echo "<h2>" . $year . "年" . $month . "月</h2>\n"; echo "<table border=1>\n"; echo "<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr>\n"; //1日の前まで空白を表示 echo "<tr>"; for ($i = 0; $i < $day_of_week; $i++) { echo "<td>&nbsp;</td>"; } //日数-1 ループ for ($date = 1; $date < $days; $date++, $day_of_week++) { if ($day_of_week == 7) { $day_of_week =0; echo "</tr>\n<tr>"; } printf("<td>%02d</td>", $date); } printf("<td>%02d</td>", $date); //余った曜日を空白で埋める for ($i = $day_of_week; $i < 6; $i++) { echo "<td>&nbsp;</td>"; } echo "</tr>\n</table>\n"; } $year = 2006; for ($month = 7; $month < 11; $month++) { calender_table($year, $month); } ?>

mellow91
質問者

補足

すいません、質問していてお礼遅れてしまいました。なるほど、このように作成するんですね、大変勉強になりました。ありがとうございました!!

その他の回答 (2)

回答No.3

カレンダーの値をいったん配列に取り込んで 5行目までと6行目の表示部分を切り離すやり方です。 function calender($year,$month){  $cal = mktime(0,0,0,$month,1,$year);  $edate = date("t",$cal);  $array = array();  $kuhaku = "・"  // カレンダーのセルは最大で42個  for($i=0; $i<42; $i++){   $array[$i] = $kuhaku;  }  // その月の始まりのセルに1から終わりの日までを入れていきます。  for($i=date("w",$cal),$a=0; $a<$edate; $i++,$a++){   $array[$i] = $a+1;  }  // 表示部分  echo "<table border=1>\n";  echo "<tr><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>\n";  //5行目までを表示する  for($i=0; $i<5; $i++){   echo "<tr>";   for($j=0; $j<7; $j++){    echo "<td>".$array[$j+$i*7]."</td>";   }   echo "</tr>\n";  }  //配列の35番目(6行目の一番左のセル)に数字が入っていれば表示する  if($array[35]!=$kuhaku){   echo "<tr>";   for($j=0; $j<7; $j++){    echo "<td>".$array[35+$j]."</td>";   }   echo "</tr>\n";  }  echo "</table>\n"; }

mellow91
質問者

補足

すいません、質問していてお礼遅れてしまいました。なるほど、このように作成するんですね、大変勉強になりました。わざわざコードまで書いて頂いて感激です。ありがとうございました!!

  • f_motion
  • ベストアンサー率53% (7/13)
回答No.1

カレンダーを1から作るのは、意外と面倒です。 いろいろ作り方は、ありますが、 (1)その月の総日数を調べる (2)その月が何曜日から、始まるか調べる。 (3)その月が何週あるか調べる。 こんな所でしょうか、 何週かを調べて4週ならば、日から土曜を 4回繰り返すと言う感じです、どう条件をつけるかが、 最初は苦労しますが・・・ 参考にいくつか挙げておきます。 http://aki.adam.ne.jp/php/dl.php?dl=calendar http://www.komonet.ne.jp/~php/program/schedule/chap1.htm

関連するQ&A