Heute eine kleine Fortsetzung des ersten Teils der Reihe Datumsangaben mit PHP. Ich beschäftige mich selbst seit ein paar Tagen mal wieder etwas intensiver mit dem PHP DateTime Objekt, da ich einen Belegungskalender für einen Kunden realisiere. Mitunter habe ich mich selbst gefragt, inwieweit es mit dem DateTime Objekt möglich ist zwischen zwei sich unterscheidenden Daten zu iterieren, um z.B. einen bestimmten Zeitraum (Tage) in einem Monat festzulegen. Die Antwort auf diese Frage ist ziemlich einfach.
Einfach mit mit DateTime iterieren
Das PHP DateTime Objekt erlaubt es uns seit der PHP Version 5.2.2 mit den Vergleichs-Operatoren zu arbeiten. Somit kann man mit einer einfachen while-Schleife zwischen zwei DateTime Objekten iterieren.
Dazu folgendes Beispiel:
$start = new DateTime('2013-01-10');
$end = new DateTime('2013-01-20');
while ($start < = $end) {
echo $start->format('d.m.Y') . "\n";
$start->modify('+1 day');
}
In diesem Beispiel durchlaufen wir einfach alle Tage vom 10.01.2013 bis zum 20.01.2013, indem wir das Startdatum immer wieder mit dem Enddatum abgleichen. Mit jedem Durchlauf der while-Schleife erhöhen wir das Startdatum um einen Tag bis das Enddatum erreicht ist. Easy, oder?
Es geht auch komplexer …
PHP bietet neben dem DateTime Objekt verschiedene andere Objekte für den Umgang mit Zeitangaben an. Unter anderem gibt es auch noch das DateInterval und das DatePeriod Objekt. Wie aus den Namen vielleicht schon abzuleiten ist, kann man hier elegant zeitliche Intervalle und Zeiträume festlegen. Das folgende Beispiel zeigt, wie man mit diesen Objekten über einen Zeitraum iterieren kann.
$start = new DateTime('2013-01-10');
$end = new DateTime('2013-01-10');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $day) {
echo $day->format('d.m.Y') . "\n";
}
Im Grunde genommen erledigt dieses Beispiel genau den gleichen Job, wie unser erstes Beispiel. Aus meiner Sicht aber ein bisschen smarter, als die while-Schleife, da wir hier für jeden einzelnen Tag ein DateTime Objekt erhalten und nicht wie im ersten Beispiel ständig nur das $start Objekt um einen Tag erhöhen. Da das DatePeriod Objekt das Traversable Interface implementiert, kann man hier ganz einfach mittels einer foreach-Schleife durch den vorher festgelegten Zeitraum iterieren. Das Interval von einem Tag haben wir ebenfalls vorher festgelegt.
Fazit
PHP macht es uns mit seinen Date-Objekten sehr einfach, sofern man mindestens PHP 5.3 auf seiner Maschine installiert hat. Wie in den Beispielen gezeigt, können wir ziemlich einfach durch Zeiträume iterieren. So macht die Entwicklung eines Belegungskalenders doch gleich sehr viel mehr Spaß. Haben wir wieder etwas gelernt. 😉
1 Gedanke zu „Datumsangaben mit PHP- Teil II“