なんかに使おうと思ったのでPHPで書いてみた。17分くらい。時間かかりすぎやね。
ループの部分の見通しが悪いのがいかんともしがたいね。ほかの書き方も思いついたら書く。
<?php if($_REQUEST){ $year = $_REQUEST["year"]; $month = $_REQUEST["month"]; } else { $year = 0; $month = 0; } if(!$year || !$month || !is_numeric($year) || !is_numeric($month)){ $date_ = getdate(); $month = $date_["mon"]; $year = $date_["year"]; } $date = getdate(mktime(0,0,0,$month,1,$year)); $day = 1; $dayofweek = 0; print "<table>"; print "<tr>"; print "<th colspan=7>"; print $year . "/" . $month; print "</tr>"; print "<tr>"; print "<td>Sun</td>"; print "<td>Mon</td>"; print "<td>Tue</td>"; print "<td>Wed</td>"; print "<td>Thu</td>"; print "<td>Fri</td>"; print "<td>Sat</td>"; print "</tr>"; print "<tr>"; while(1){ if(($day != 1 && checkdate($month,$day,$year)) || ($day == 1 && $dayofweek >= $date["wday"])){ print "<td>".$day."</td>"; $day++; } else { print "<td></td>"; } $dayofweek = ($dayofweek + 1) % 7; if($dayofweek == 0){ print "</tr><tr>"; if(!checkdate($month,$day,$year)){ print "</tr></table>"; break; } } } $prevyear = $year; $nextyear = $year; $nextmonth = $month + 1; $prevmonth = $month - 1; if($month == 1){ $prevmonth = 12; $prevyear = $prevyear - 1; } else if ($month == 12){ $nextmonth = 1; $nextyear = $nextyear + 1; } print "<a href='./cal.php?year=".$prevyear."&month=".$prevmonth."'>prev</a> "; print "<a href='./cal.php?year=".$nextyear."&month=".$nextmonth."'>next</a>"; ?>