Die Funktion date_get_last_errors() in PHP
Erfahren Sie, wie die PHP-Funktion date_get_last_errors() datumsbezogene Fehler und Warnungen zurückgibt und wie Sie sie zur Fehlersuche einsetzen.
Sind Sie es leid, mit datumsbezogenen Fehlern in Ihrem PHP-Code umzugehen? Dann haben Sie Glück. Die PHP-Funktion date_get_last_errors() ist genau das Richtige für Sie.
In diesem Artikel werfen wir einen genauen Blick darauf, wie die Funktion date_get_last_errors() funktioniert, welche Parameter sie hat und wie Sie sie zur Fehlersuche bei datumsbezogenen Problemen in Ihrem PHP-Code einsetzen können.
Was ist die Funktion date_get_last_errors()?
Die Funktion date_get_last_errors() ist eine eingebaute PHP-Funktion (verfügbar seit PHP 5.2.0), mit der Sie Informationen über den letzten aufgetretenen datumsbezogenen Fehler oder die letzte Warnung abrufen können. Sie gibt ein assoziatives array zurück, das warning_count, warnings, error_count und errors enthält – mit den spezifischen Codes und Textbeschreibungen dessen, was beim letzten Datums-/Zeitvorgang schiefgelaufen ist.
Verwendung von date_get_last_errors()
Um die Funktion date_get_last_errors() zu verwenden, rufen Sie sie auf, nachdem eine Datumserstellungs- oder Datumsänderungsfunktion fehlgeschlagen ist. Für produktionsreife Code sollten Sie immer prüfen, ob die Datumsfunktion false zurückgegeben hat, bevor Sie die Fehlerdetails abrufen. Hier ein Beispiel:
In diesem Beispiel versuchen wir, ein Datumsobjekt aus dem string '2022-13-01' zu erstellen, der einen ungültigen Datumswert darstellt (Monat 13 existiert nicht). Nachdem wir geprüft haben, dass date_create_from_format() false zurückgegeben hat, rufen wir date_get_last_errors() auf und geben das zurückgegebene array mit print_r() aus.
Die Ausgabe dieses Codes lautet:
Array
(
[warning_count] => 1
[warnings] => Array
(
[10] => The parsed date was invalid
)
[error_count] => 0
[errors] => Array
(
)
)Wie Sie sehen, unterscheidet das zurückgegebene array zwischen Warnungen und Fehlern:
- Fehler bedeuten, dass die Eingabe überhaupt nicht geparst werden konnte (zum Beispiel ein unerwartetes Zeichen oder ein Format, das nicht mit dem string übereinstimmt).
- Warnungen bedeuten, dass der string geparst wurde, das Ergebnis jedoch fragwürdig ist – etwa ein Wert außerhalb des gültigen Bereichs. Monat
13existiert nicht, weshalb PHP ihn umrechnet oder ablehnt und die Warnung[10] => The parsed date was invalidauslöst.
Achtung: Der Rückgabewert bei fehlerlosen Operationen
Ein häufiger Fallstrick besteht darin, dass sich der Rückgabewert zwischen PHP-Versionen geändert hat:
- PHP 5.2 – 8.1: Gibt immer das assoziative array zurück, wobei
warning_countunderror_countauf0gesetzt sind, wenn nichts schiefgelaufen ist. - PHP 8.2 und später: Gibt
false(boolean) zurück, wenn der vorherige Datumsvorgang weder Warnungen noch Fehler erzeugt hat.
Genau deshalb sollten Sie sich auf das Ergebnis der Datumsfunktion selbst stützen und nicht auf date_get_last_errors():
<?php
// A valid date — parsing succeeds.
$result = date_create_from_format('Y-m-d', '2022-01-15');
if ($result === false) {
// This branch is skipped because the date is valid.
print_r(date_get_last_errors());
} else {
echo "Parsed successfully: " . $result->format('Y-m-d');
}
?>Ausgabe:
Parsed successfully: 2022-01-15Da $result ein gültiges DateTime-object ist, rufen wir date_get_last_errors() nie auf – und umgehen damit vollständig die versionsabhängige Überraschung mit false vs. array.
Praktischer Debugging-Workflow
Beim Umgang mit Datums-Parsing in der Produktion sollten Sie diesem Muster folgen, um Probleme sicher zu erfassen und zu protokollieren:
- Rufen Sie die Datumserstellungsfunktion auf (z. B.
date_create_from_format()oderDateTime::createFromFormat()). - Prüfen Sie, ob das Ergebnis
falseist. - Falls
false, rufen Siedate_get_last_errors()auf, um die arrayswarningsunderrorszu untersuchen. - Protokollieren oder zeigen Sie die spezifischen Warn-/Fehlercodes und -meldungen an, um das genaue Parsing-Problem zu identifizieren, ohne Ihre Anwendung zu stoppen.
Parameter
Die Funktion date_get_last_errors() nimmt keine Parameter entgegen. Sie gibt lediglich Informationen über den letzten aufgetretenen datumsbezogenen Fehler oder die letzte Warnung zurück (ein assoziatives array oder false in PHP 8.2+, wenn keine Fehler aufgetreten sind).
Objektorientiertes Äquivalent
Wenn Sie mit der Klasse DateTime anstelle der prozeduralen Funktionen arbeiten, sind dieselben Informationen über die statische Methode DateTime::getLastErrors() verfügbar:
<?php
$result = DateTime::createFromFormat('Y-m-d', 'not-a-date');
if ($result === false) {
print_r(DateTime::getLastErrors());
}
?>Ausgabe:
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 3
[errors] => Array
(
[0] => A four digit year could not be found
[10] => Not enough data available to satisfy format
)
)Diesmal kann der string überhaupt nicht geparst werden, sodass die Probleme als Fehler (nicht als Warnungen) gemeldet werden. DateTime::getLastErrors() gibt dieselbe Struktur zurück wie date_get_last_errors() und folgt denselben oben beschriebenen Versionsregeln.
Verwandte Funktionen
date_create_from_format()— Parst einen Datumsstring anhand eines expliziten Formats; die Funktion, deren Fehler Sie hier untersuchen.date_create()— Erstellt einDateTime-object aus einem flexiblen Datumsstring.checkdate()— Validiert ein gregorianisches Datum, bevor Sie versuchen, es zu parsen.date()— Formatiert einen Zeitstempel, sobald Sie ein gültiges Datum haben.
Fazit
Die Funktion date_get_last_errors() ist ein wertvolles Werkzeug für jeden PHP-Entwickler, der datumsbezogene Fehler beheben muss. Indem sie die spezifische Warnung oder den spezifischen Fehler des letzten Datums-/Zeitvorgangs aufdeckt, ermöglicht sie das Debuggen von Parsing-Problemen, ohne Ihre Anwendung zu stoppen. Denken Sie an die zwei wichtigen Gewohnheiten: Stützen Sie sich immer auf den eigenen Rückgabewert der Datumsfunktion (false) und berücksichtigen Sie die Änderung in PHP 8.2+, bei der date_get_last_errors() selbst false zurückgibt, wenn nichts schiefgelaufen ist.