思いついたようにフルスクラッチからカレンダーを書いてみた

なんかに使おうと思ったので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>";
?>