月間カレンダーの描画

<html><body>
<style>
.cal td { border-bottom: 1px solid silver; padding: 4px; }
.cur { font-size: 14px; color: black; }
.oth { font-size: 9px; color: silver; }
.sun { color: red; }
</style>
<?php
// カレンダーの描写
    echo make_calendar(2018,2);

    function make_calendar($year, $month){
    // 月初めをセット
        $t = new DateTime();
        $t->setDate($year, $month, 1);
        // その週の月曜日(カレンダー左上の日)を得る
        $t->modify("Mon this week");
        // 月終わりをセット
        $end_t = new DateTime();
        $end_t->setDate($year,$month, 1);
        $end_t->modify("Sun");
        $html = "<p>{$year}年 {$month}月</p>";
        $html .= "<table class='cal'>";
        for (;;){
            $d = $t->format("d");
            $w = $t->format("w");
            $c_week = ($w == 0) ? "sun" : (($w == 6) ? "sat" : "");
            $c_mon = ((int)$t->format("m") == $month) ? 'cur' : 'oth';
            if ($w == 1){
                $html .= "<tr>";
            }
            $html .= "<td class='$c_mon $c_week'>$d</td>";
            if ($w == 0){
                $html .= "</tr>";
            }
            $diff = $end_t->diff($t);
            if ($diff->days == 0) break;
            $t->modify("+1 days");
        }
        $html .= "</table>";
        return $html;
    }
?></body></html>