カレンダーの作成
年月を指定してカレンダーを作成します。

&calendar(2003,3); サブルーチンを呼び出します。引数は年月です。
@mdays は1〜12月の各日数です。
if ($mon == 2 && $year % 4 == 0) {$mdays = 29;} うるう年を判定します。
&date($year,$mon,1);  指定された年月の1日の曜日を算出します。
$wは曜日、$kは日付を表します。
■プログラム (sample8.cgi)
print "<center>";
&calendar(2003,3);
print "</center>";
###
sub calendar {
($year,$mon) = @_;
@week = ('日','月','火','水','木','金','土');
@mdays = (31,28,31,30,31,30,31,31,30,31,30,31);
$mdays = $mdays[$mon - 1];
if ($mon == 2 && $year % 4 == 0) {$mdays = 29;}
print "$year年$mon月\n";
print "<table border=1 cellspacing=0 cellpadding=3><tr>";
foreach (0 .. 6) {print "<td>$week[$_]</td>";}
print "</tr>\n";

&date($year,$mon,1);
$w = 0;
$k = 1;
for ($i=0; $i<42; $i++) {
if (!$w) {print "<tr align=center>";}
if ($wday <= $i && $k <= $mdays) {print "<td>$k</td>"; $k++;} else {print "<td> </td>";}
$w++;
if ($w == 7) {print "</tr>"; if ($mdays < $k) {last;} $w = 0;}
}
print "</table>\n";
}
###
sub date {
($y,$m,$d) = @_;
if ($m < 3) {$y--; $m += 12;}
$wday = ($y+int($y/4)-int($y/100)+int($y/400)+int((13*$m+8)/5)+$d)%7;
}
■実行結果
2003年3月
      1
2345678
9101112131415
16171819202122
23242526272829
3031     


HOME Copyright (C) CGI-design All Rights Reserved.