Wie erstelle ich mit PHP das durchzählen der Tage in einem Monatskalender richtig?

1 Antwort

 if($einzel_tage <= $leer_zellen) {
                           echo "<td>&nbsp;</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;

Visierhoch 
Fragesteller
 23.01.2024, 12:12

Hallo und vielen Dank für schnelle Antwort.

wenn ich bei diesem Code

if($einzel_tage <= $leer_zellen) {
                           echo "<td>&nbsp;</td>";
                           $einzel_tage++;
                       }

das hochzählen entferne, wird in der Tabelle nichts mehr angezeigt.

Dafür funktioniert dieser Code:

$tag = ($y * 7 + $x) - $leer_zellen;

Allerdings habe ich hier die Logik überhaupt nicht verstanden. Aber vermutlich muss ich mich damit einmal ganz in Ruhe beschäftigen.

1
Destranix  23.01.2024, 12:34
@Visierhoch
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.)

0