PHPでカレンダ

カレンダの表示
指定された月のカレンダを表示します。月の日数が変化するため、曜日の算定が面倒ですが、ここではdate()関数を用いて月の初日の曜日を取得します。内部の日付:時刻は1970年1月1日を起点にした秒数に閏年を考慮して計算を行います。

月のカレンダ表示
$currentの月のカレンダを表示します。first_day は初日の曜日を示します。&nbspは改行をしない空白です。$i %7 は$i を7で割った余りになります。
$first_week=date("w",$current);
$last_day=date("t",$current);
<?php print(date("Y年m月",$current));
   ?></h3>
<table border="1" width="300">
<tr>
  <th>日</th><th>月</th><th>火</th>
  <th>水</th><th>木</th><th>金</th>
  <th>土</th></tr>
<?php
for($i=1;$i<=$first_week+$last_day;
  $i++){
  if($i%7==1){print("<tr>");}
  if($i>$first_week){
    print("<td>".($i-$first_week).
    "</td>");
  }else{
    print("<td>&nbsp;</td>");
  }
  if($i%7==0){print("</tr>");}
}
?>
</table>

date()関数
date()関数は、第一引数のもじでさまざまな値を返します。

$timestamp=mktime(0,0,0,date("n")+
   $_GET['num'],date("d"),date("Y"));
$today_year =date("Y",$timestamp);
$today_month=date("n",$timestamp);
$current=mktime(0,0,0,$today_month,1,
  $today_year);

日付の決定
ここでは、今日の月からの相対値で、表示する月を設定します。-10 を指定すると、今日から10月前の月のカレンダを表示します。$_GET['num'] はFormなどから、CGIに渡す日付の相対値です。$currentに表示する日付を記憶します。

n 月数(1~12)
D 英字の曜日 t 月の日数
時(12時間) 0〜6の曜日
H 時(24時間) Y
M 月(英字)