function svgmonth($nen,$month,$bx=40,$by=40) { $stday = new DateTime($nen.'-'.$month.'-1'); $stweek = (int)$stday->format('w'); // 1日の曜日 $days = (int)$stday->format('t'); // 月の日数 $weeks=array("SUN","MON","TUE","WED","THU","FRI","SAT"); print "<g transform=\"translate({$bx},{$by})\">\n"; // 月の始まり print "<text class=\"mfont c03\" x=\"12\" y=\"0\">{$nen}年{$month}月</text>\n"; for($i=0;$i<7;$i++) { $x = 25*$i+12; $w = $weeks[$i]; print "<text class=\"wfont c03\" x=\"{$x}\" y=\"25\">{$w}</text>\n"; } $wn = 0; // 何週目 $w = $stweek; //スタートの曜日 $px = 25*$w; // 日のX座標 $py = 0; // 日のY座標 $c = 1; // 色 print "<g transform=\"translate(0,30)\">\n"; // 月の数字の部分の基点 print "<g transform=\"translate(0,0)\">\n"; // 一週間の基点 for($i=1;$i<=$days;$i++) { $c = ($w==0) ? 3 : 1; print <<<LINE1 <g transform="translate({$px},0)"><rect class="c0{$c}" width="22" height="22" rx="4"/> <text class="dfont" x="12" y="16">{$i}</text></g>\n LINE1; $w++; $px += 25; if($w>6) { $w = 0; $px = 0; $py +=25; print "</g><g transform=\"translate(0,{$py})\">\n"; } } print "</g>\n"; //一週間の終わり print "</g>\n"; //月の数字の部分の終わり print "</g>\n"; // 月の終わり }
曜日日数の計算
曜日と日数はDateTimeクラスを使い行う
主な変数
$stweek: その月に1日の曜日
$days : その月の日数
$wn : 何週目か
$w : 作業用の曜日
$px : 日のX座標
$py : 日のY座標
$c : 平日、土曜日、日曜日、祝日に使う色の種類