PHP – Datumsdifferenz sicher ermitteln

Um in PHP die Differenz zwischen zwei Datumsangaben zu ermitteln, gibt es folgende Möglichkeit:

$date1 = '2013-03-01'
$date2 = '2013-05-17'

$dateDiff = gregoriantojd(
                date('m', strtotime($date2)),
                date('d', strtotime($date2)),
                date('Y', strtotime($date2)))
            - gregoriantojd(
                date('m', strtotime($date1)),
                date('d', strtotime($date1)),
                date('Y', strtotime($date1)));

Es erfolgt erst die Umrechnung in das vom gregorianische ins julianische Datumsformat. Danach kann man durch eine einfache Rechenoperation die Differenz zwischen beiden Datumsangaben ermitteln und erhält den Abstand zwischen Datum 1 und Datum 2 in Tagen.

PHP Datumsumwandlung von 05.04.12 in 2012-04-05

Beim Konvertieren von Datumsangaben in PHP kann es, vorrausgesetzt man macht es nicht wohlüberlegt, schon einmal zu der einen oder anderen Überraschung kommen.

Möchte man beispielsweise das Datum 05.04.12 einfach per

$date = date('Y-m-d', strtotime('05.04.12'));

konvertieren, dann bekommt man häufig das aktuelle Datum ausgegeben. Warum ist das so? Meiner Meinung nach, liegt das daran, dass PHP das Datum nicht korrekt in einen Timestamp auflösen kann. Es kann also nicht automatisch ermittelt werden, was hier Tag, Monat und Jahr sein soll. Bei einem Datum 05.04.2012 ist das allerdings kein Problem. Da kann strtotime() den korrekten Timestamp problemlos extrahieren.

Wie sieht ein möglicher Lösungsansatz aus?

$dateTemp = explode('.', '05.04.12');
$date = date('Y-m-d', mktime(0, 0, 0, $dateTemp[1], $dateTemp[0], $dateTemp[2]));

Somit erhält man das gewünschte Datum. Wichtig kann das werden wenn man nicht nur ein statisches Datum, wie in diesem Fall hat, sondern die Datumsangabe bspw. per Variable übergeben wird.