Feed Rss



Nov 15 2010

date und die Zeitumstellung

category: Allgemein,PHP author:

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);

	...
}

Leave a Reply