Ich hatte folgendes Problem: ich will einen Kalender ausgeben. Dazu bestimme ich den ersten Tag des Monats und laufe dann Woche für Woche durch. Die date Funktion liefert dazu alle nötigen Informationen: Anzahl der Tage in einem Monat, Tag des Monats und den Wochentag als Zahl. Der Code sieht so ähnlich aus:
$startTime = mktime(0, 0, 0, $month, $day, $year);
$endTime = ...;
$curWeek = $startTime;
while (date('m', $curWeek) == date('m', $endTime) {
$timeStep = min(
8 - date('N', $curWeek), // eine Woche vor
date('t', $curWeek) - date('j', $curWeek) + 1 // Ende des Monats
);
$nextWeek = $curWeek + 24 * 3600 * $timeStep;
...
}
Das funktioniert soweit auch wunderbar, nur im Oktober gibt es ein Problem. Dank der Zeitumstellung ist der nämlich genau eine Stunde länger. Das berücksichtigt die Variable timeStep natürlich nicht. Die Alternative ist die Verwendung von strtotime. Beispiel:
$startTime = mktime(0, 0, 0, $month, $day, $year);
$endTime = ...;
$curWeek = $startTime;
while (date('m', $curWeek) == date('m', $endTime) {
$timeStep = min(
8 - date('N', $curWeek), // eine Woche vor
date('t', $curWeek) - date('j', $curWeek) + 1 // Ende des Monats
);
$nextWeek = strtotime("+{$timeStep} day", $curWeek);
...
}