Moin!
Moin,
ich möchte mit meinem Skript die nächsten 3 Montage und Mittwoche bestimmen. Bis letzte Woche hat es gut funktioniert, nun bei einem Monatsübergang gehts nicht mehr :-(. ich habs mit mktime + soundsoviel days versucht, aber er bleibt immer im aktuellen monat. Muss ich dann nochmal etwa überprüfen, ob er die "monatsgrenze überschreitet" und dann + 1 month miteinbringen?
Das Skript sieht bisher folgendermaßen aus:
Hier erzeugst du nacheinander:
$j = date('Y');
Das Jahr von HEUTE,
$m = date('m');
den Monat von HEUTE,
$d = date('d', strtotime("+ $i days"));
den Tag von HEUTE plus $i Tage.
$tag = date("d.m.Y",mktime(0,0,0,$m,$d,$j));
Und dann erzeugst du aus der Sammlung dieser Dinge ein neues Datum.
Warum erzeugst du nicht in EINEM Schritt einfach das Tagesdatum von HEUTE plus $i Tage?
strtotime() gibt dir einen Unix-Timestamp zurück von der Datumsbeschreibung, die in dem String steht. Wenn in dem String steht "HEUTE plus $i Tage", dann ist das Ergebnis schon ein vollwertiges Datum mit Tag, Monat und Jahr, und muss einfach nur noch durch die Funktion date() in eine menschenlesbare Form gebracht werden.
Deine Einzelbehandlung von Jahr, Monat, anderem Tag und das durchschleifen durch mktime() verursacht dir den Fehler, dass das Resultat falsch ist, wenn zwar das Tagesdatum im neuen Monat liegt, aber das Monats- und Jahresdatum noch nicht.
Abgesehen davon kann man die Wochentagsfindung auch noch optimieren. strtotime() kennt auch Befehle wie "next Monday" und findet dann ganz automatisch den nächsten Montag. Und mit Sicherheit auch den Montag in zwei und drei Wochen. Somit musst du nicht mehr einfach 7 Tage erzeugen und checken, welcher davon der Montag ist.
$monday1 = date("d.m.Y", strtotime('next Monday'));
- Sven Rautenberg