Seit PHP 5.2.0 gibt es das DateTime Objekt. Mit Version 5.3 wurden einige interessante Methoden hinzugefügt. Dieses Objekt ist eine nette Alternative zu date
. Besonders nett finde ich die bereits definierten Konstanten. Spezielle Zeitformate (bspw RFC822) sind hier zu finden. Dadurch spart sich der Entwickler Zeit, die er für Recherche und Umsetzung aufwenden müsste.
Erzeugt man sich ein DateTime Objekt, so erhält man die aktuelle Zeit und Datum.
$now = new DateTime();
echo $now->format(DateTime::RSS);
Dies entspricht einer OOP-Version von date()
. Aber mit diesem Objekt kann man auch rechnen. Hierzu erzeugt man sich nur ein DateInterval
-Objekt. Und dieses kann man dem DateTime
-Objekt hinzufügen. Als Beispiel addieren wir zur aktuellen Uhrzeit/Datum Kombination 3-Wochen. $now
existiert noch, also nutzen wir dieses Objekt für unser Experiment:
$twoWeeksInterval = new DateInterval("P3W");
$now->add($twoWeeksInterval);
echo $now->format(DateTime::RSS);
Wir geben das Datum dann auch gleich aus und sehen, dass wir in der Zeit drei Wochen in die Zukunft gereist sind. Die Benutzung ist hier ziemlich einfach, aber wir wollen überprüfen ob die Berechnung auch wirklich stimmt. Im Beispielcode klonen wir vor unseren Berechnungen einfach das $now
-Objekt, damit der Zeitstempel auch passt. Anschließend berechnen wir die Differenz aus $now
und $now2
. Hierfür gibt es die diff
-Methode.
$now = new DateTime();
$now2 = clone $now;
$twoWeeksInterval = new DateInterval("P3W");
$now->add($twoWeeksInterval);
$calcInterval = $now->diff($now2);
echo $calcInterval->format("%R%d Tage");
Als Ausgabe erhalten wir -21 Tage
, da $now2
3 Wochen in der Vergangenheit gegenüber $now
liegt. Und 3 Wochen sind nunmal 21 Tage.
Das DateTime-Objekt und seine Freunde wie DateInterval sind für die objektorienterte Programmierung sehr interessant und ich denke auch Objekte wie das ArrayObject machen viel Spaß.