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



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

我在 2016 年 1 月遇到一些问题,数据不会显示在表格上。 这是怎么回事?

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
从值 $letzteKW - $ersteKW + 1;
($ersteKW < $letzteKW ? $letzteKW - $ersteKW + 1 : $letzteKW + 1);

最后,将出现 2016 年 1 月并正确打印值。

最新更新