Wie erstelle ich mit PHP das durchzählen der Tage in einem Monatskalender richtig?
Hallo,
ich übe PHP und erstelle gerade einen Monatskalender in einer Tabelle. In meinem Code habe ich irgendwo einen Logikfehler. Zum Beispiel beginnt der Monat Februar in diesem Jahr an einem Donnerstag. Der Kalender erzeugt korrekt 3 leere Zellen für Mo, Di und Mi. Am Donnerstag beginnt die Zählung der Tage aber nicht mit 1 sondern mit 4. Wie erreiche ich, dass die Zähluing der Tage erst nach erzeugen der leeren Zellen am Monatsanfang beginnt. Es wäre nett wenn sich das mal jemand ansieht und mir auch die Logik erklärt, damit ich das Ganze verstehe.
Vielen Dank für's Lesen
Hier ist der Code:
<?php
$gesamt_tage = date("t");
$einzel_tage = 1;
$akt_tag = date("j");
$leer_zellen = date("N", strtotime(date("Y-m-01"))) - 1;
?>
<table border="1" cellpadding="1" cellspacing="1" summary="">
<thead>
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
</thead>
<?php
for($tr = 1; $tr <= 5; $tr++) {
echo "<tr>";
for($td = 1; $td <= 7; $td++) {
if($einzel_tage <= $leer_zellen) {
echo "<td> </td>";
$einzel_tage++;
} else {
echo "<td>";
if($einzel_tage <= $gesamt_tage) {
echo $einzel_tage++;
}
echo "</td>\n";
}
}
echo "</tr>\n";
}
?>
</table>
1 Antwort
if($einzel_tage <= $leer_zellen) {
echo "<td> </td>";
$einzel_tage++;
}
Da den Counter nicht erhöhen.
Verwende stattdessen einen Extra-Counter um den Start zu finden.
Oder du baust dir das gleich so um, dass du erste und letzte Zeile extra berechnest und die dazwischen alle gleich. Du kannst dir für eine Zeile y und eine Spalte x den Tag ja folgendermaßen berechnen:
$tag = ($y * 7 + $x) - $leer_zellen;
wird in der Tabelle nichts mehr angezeigt.
Das stimmt. Das Problem ist, dass du derzeit versuchst, die Zellen und die Tage mit derselben Variable hochzuzählen, was (zumindest so) nicht klappen kann, da sich die Werte unterscheiden.
Allerdings habe ich hier die Logik überhaupt nicht verstanden. Aber vermutlich muss ich mich damit einmal ganz in Ruhe beschäftigen.
Du hast eine aufsteigende Zahlenfolge, die von links nach rechts, von oben nach unten durch die tabelle verläuft.
In jeder Zeile sind 7 Tage, sprich die ersten Spalten je Zeile haben den Wert 0, 7, 14, ...
Das entspricht 7 * $y, wobei y der Index der Zeile ist.
Für die restlichen Zellen in der zeile addierst du jeweils den Index der Spalte x. Das ergibt dann 7 * $y + $x.
Soweit wäre das korrekt, wenn der erste Tag ein Montag ist. Wenn der erste tag kein Montag ist, so verschieben sich die Tage um $leer_zellen nach rechts. Sprich der Tag an einer Position ist um $leer_zellen kleiner als ohne die Verschiebung (kleiner, da die Zählung ja erst später anfängt). Entsprechend ergibt sich dann die oben geschriebene Formel.
(Ah ja: Indizierung beginnt bei mir bei 0.)
Hallo und vielen Dank für schnelle Antwort.
wenn ich bei diesem Code
das hochzählen entferne, wird in der Tabelle nichts mehr angezeigt.
Dafür funktioniert dieser Code:
Allerdings habe ich hier die Logik überhaupt nicht verstanden. Aber vermutlich muss ich mich damit einmal ganz in Ruhe beschäftigen.