カレンダー前後の月の切れ端を今月のカレンダーとして表示する処理方法

今月のカレンダーを表示する際に、例えば1日が水曜日だったとしたら、前月の日曜〜火曜までがその月のカレンダーに表示させなければなりません。その逆もあります。

31日が火曜日だったら次の月の水曜〜土曜までをその月のカレンダーに表示しなければなりません。

この何気ないカレンダー処理が意外と面倒くさいのでまとめておきました。PHPでソースを載せておきます。PHPのmktime関数とかすごく便利ですね。

使い方:
start_month(2010, 11); // 20101031が返ってきます(前月を挟んで週の終わり)
end_month(2010, 11); // 20101104が返ってきます(次月を挟んで週の終わり)

function start_month($year,$month){
	$week_id = date('w', mktime(0, 0, 0, $month, 1, $year) );
	return date('Ymd', mktime(0, 0, 0, $month, (1-$week_id), $year) );
} 
function end_month($year,$month){
	$week_id = date('w', mktime(0, 0, 0, $month+1, 1, $year) );
	if($week_id == 0) return date('Ymd', mktime(0, 0, 0, $month+1, 0, $year) );
	return date('Ymd', mktime(0, 0, 0, $month+1, (7-$week_id), $year) );
}