Wie man den Unterschied zwischen zwei Daten in PHP berechnet: vom Anfänger zum Profi
\n\nHaben Sie sich jemals gefragt: „Wie viele Tage sind seit meinem letzten Urlaub vergangen?“ oder „In wie vielen Stunden endet die Aktion auf der Website?“? Wenn Sie ein PHP-Entwickler sind, werden diese Fragen zu einer Aufgabe: Wie berechnet man den Unterschied zwischen zwei Daten.
\n\nDiese Frage ist eine der beliebtesten auf Stack Overflow mit tausenden von Aufrufen. Und das aus gutem Grund: Die Arbeit mit Daten in PHP kann tückisch sein. Schaltjahre, Zeitzonen, verschiedene Formate – all das kann selbst den durchdachtesten Code zum Scheitern bringen.
\n\nIn diesem Artikel behandeln wir 5 bewährte Methoden zur Berechnung der Differenz zwischen Daten in PHP – von den einfachsten bis zu den professionellsten. Sie erfahren, wann Sie welche Methode verwenden sollten, und erhalten fertige Codebeispiele.
\n\n1. Die klassische Methode: strtotime() und einfache Arithmetik
\n\nDer älteste und intuitivste Weg ist, Daten mit der Funktion strtotime() in Unix-Zeitstempel (Timestamp) umzuwandeln und einfach eine Zahl von der anderen abzuziehen.
<?php\n$date1 = strtotime('2024-01-15');\n$date2 = strtotime('2024-03-20');\n\n$diff_seconds = $date2 - $date1;\n$diff_days = floor($diff_seconds / (60 * 60 * 24));\n\necho "Unterschied in Tagen: " . $diff_days; // Gibt aus: 65\n?>\n\nVorteile: Einfachheit, funktioniert in jeder PHP-Version.
\nNachteile: Berücksichtigt keine Zeitzonen, Probleme mit Daten vor 1970, keine integrierte Unterstützung für Monate und Jahre (da deren Länge variiert).
\n\nDiese Methode eignet sich für schnelle Berechnungen „auf die Schnelle“, aber für ernsthafte Projekte sollten Sie modernere Werkzeuge verwenden.
\n\n2. Der moderne Standard: Die Klasse DateTime und die Methode diff()
\n\nSeit PHP 5.2 haben wir die leistungsstarke Klasse DateTime. Sie ist das Schweizer Taschenmesser für die Arbeit mit Daten. Die Methode diff() gibt ein DateInterval-Objekt zurück, das alle Informationen über die Differenz enthält.
<?php\n$date1 = new DateTime('2024-01-15');\n$date2 = new DateTime('2024-03-20');\n\n$interval = $date1->diff($date2);\n\necho "Unterschied: " . $interval->days . " Tage"; // 65\necho "oder " . $interval->m . " Monate und " . $interval->d . " Tage"; // 2 Monate und 5 Tage\n?>\n\nDateInterval bietet Zugriff auf folgende Eigenschaften:
\n- \n
y— Jahre \n m— Monate \n d— Tage \n h— Stunden \n i— Minuten \n s— Sekunden \n days— Gesamtanzahl der Tage (das Nützlichste!) \n invert— Flag: 0 wenn das erste Datum früher ist, 1 wenn später \n
Diese Methode berücksichtigt Schaltjahre und arbeitet korrekt mit verschiedenen kalendarischen Besonderheiten. Sie wird in der offiziellen PHP-Dokumentation empfohlen.
\n\n3. Formatierung der Differenz: Wie man „2 Jahre 3 Monate 10 Tage“ ausgibt
\n\nOft möchte man nicht nur eine Zahl erhalten, sondern die Differenz schön für den Benutzer formatieren. Die Methode format() des DateInterval-Objekts hilft dabei.
<?php\n$birthday = new DateTime('1990-05-15');\n$today = new DateTime();\n\n$age = $birthday->diff($today);\n\necho $age->format('%y Jahre %m Monate %d Tage');\n// Beispiel: 34 Jahre 2 Monate 3 Tage\n?>\n\nFormatbezeichner:
\n- \n
%y— Jahre \n %m— Monate \n %d— Tage \n %h— Stunden \n %i— Minuten \n %s— Sekunden \n %a— Gesamtanzahl der Tage (Alternative zudays) \n %r— Minuszeichen, wenn die Differenz negativ ist \n
Möchten Sie die Deklination der Wörter „Tag/Tage“? Dann müssen Sie Ihre eigene Logik schreiben.