我的 PHP-日历代码有什么问题?

What's wrong with my PHP-Calendar code?

我想编写一个 1 年的自动日历。
我的目标是每个月打印出一个日历部分。

我在 2016 年 1 月遇到了一些问题,数据不会显示在 table 上。这里有什么问题?

function deutscherWochentag($zeitstempel) {
    $wochentag = date("w", $zeitstempel);
    switch ($wochentag) {
        case 0:     return 6; break;
        case 1:     return 0; break;
        case 2:     return 1; break;
        case 3:     return 2; break;
        case 4:     return 3; break;
        case 5:     return 4; break;
        case 6:     return 5; break;
    }
}

$monatsNamen= array("Januar", "Februar", "März", "April", "Mai",   
    "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
$table = "<table style=\"border: 1px solid black; border-spacing; 0px; 
    border-collapse: collapse;\">
    <tr style=\"background-color: moccasin;\">
        <th colspan=\"7\">%s</th>
    </tr>   
    <tr style=\"background-color: lightgray;\">
        <th>Mo</th>
        <th>Di</th>
        <th>Mi</th>
        <th>Do</th>
        <th>Fr</th>
        <th>Sa</th>
        <th>So</th> 
    </tr>
    %s      
</table>";
$tr = "<tr>
    %s
</tr>";
$td = "<td style=\"padding: 5px; border: 1px solid black;\">%s</td>";

for ($monat = 0; $monat < 12; $monat++) {
    $ersterZeitstempel = strtotime("first day of +".$monat." months");
    $zeitstempel = $ersterZeitstempel;
    $letzterZeitstempel = strtotime("last day of +".$monat." months");

    $ersterWochentag = deutscherWochentag($ersterZeitstempel);
    $letzterWochentag = deutscherWochentag($letzterZeitstempel);

    $ersteKW = date("W", $ersterZeitstempel);
    $letzteKW = date("W", $letzterZeitstempel);
    $anzahlWochen = $letzteKW - $ersteKW + 1;

    $datenWoche = "";
    for ($woche = 0; $woche < $anzahlWochen; $woche++) {

        $datenTag = "";
        for ($tag = 0; $tag < 7; $tag++) {

            if ($woche == 0 && $tag < $ersterWochentag) {
                $datenTag .= sprintf($td, "&nbsp;");
            } else if ( $woche == 0 && $tag >= $ersterWochentag     ||
                        $woche > 0 && $woche < $anzahlWochen - 1    ||
                        $woche == $anzahlWochen - 1 && $tag <= $letzterWochentag) {
                echo date("d.m.Y", $zeitstempel)."<br />";
                $datum = date("d", $zeitstempel);
                $datenTag .= sprintf($td, $datum);
                $zeitstempel = strtotime("+1 day", $zeitstempel);
            } else if ($woche == $anzahlWochen - 1 && $tag > $letzterWochentag) {
                $datenTag .= sprintf($td, "&nbsp;");
            }
        }

        $datenWoche .= sprintf($tr, $datenTag);
    }

    $monatsZahl = date("n", $ersterZeitstempel) - 1;
    $monatsTitel = $monatsNamen[$monatsZahl]." ".date("Y", $ersterZeitstempel);

    echo "<br />".sprintf($table, $monatsTitel, $datenWoche)."<br />";
}

非常感谢您的提前帮助。

我自己解决了这个问题。

问题是日历周。在一月份,日历周将从 52 / 53(取决于闰年)跳到 1。

我只是在上面的代码中设置了变量$anzahlWochen
来自值 [=​​11=]
($ersteKW < $letzteKW ? $letzteKW - $ersteKW + 1 : $letzteKW + 1);

然后最终会出现 2016 年 1 月并正确打印值。