我的 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, " ");
} 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, " ");
}
}
$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 月并正确打印值。
我想编写一个 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, " ");
} 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, " ");
}
}
$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 月并正确打印值。