Signatur
Beschreibung
date_get_last_errors() ist ein prozeduraler Alias für DateTimeImmutable::getLastErrors() und liefert ein assoziatives Array mit allen Warnungen und Fehlern, die beim letzten Parsen eines Datums- oder Zeitstrings aufgetreten sind. Dies ist besonders hilfreich, um fehlerhafte Datumsangaben zu erkennen, die zwar technisch geparst werden konnten, jedoch unerwartete Ergebnisse liefern.
Das zurückgegebene Array enthält vier Schlüssel: warning_count (Anzahl der Warnungen), warnings (Array mit Warnungen und ihrer Position im Eingabe-String), error_count (Anzahl der Fehler) sowie errors (Array mit Fehlern und ihrer Position).
Typische Anwendungsfälle sind die Validierung von Benutzereingaben oder das Erkennen von Mehrdeutigkeiten beim Parsen – etwa wenn ein String wie '2023-02-30' zwar ohne Exception geparst wird, aber zu einer Überlaufkorrektur führt, die in den Warnungen sichtbar wird.
Ab PHP 8.x sollte man bevorzugt DateTime::createFromFormat() mit anschließendem getLastErrors() auf dem Objekt verwenden, da die prozedurale Variante intern auf einen globalen Zustand zurückgreift, was bei paralleler Nutzung zu unerwartetem Verhalten führen kann.
Rückgabewert
Gibt ein assoziatives Array zurück mit den Schlüsseln warning_count (int), warnings (array), error_count (int) und errors (array). Wurde noch kein Datum geparst oder traten weder Warnungen noch Fehler auf, wird ein Array mit Nullwerten zurückgegeben. Im Fehlerfall gibt die Funktion false zurück.
Beispiele
Fehler beim Parsen eines ungültigen Datums erkennen
<?php
$date = date_create('nicht-ein-datum');
$errors = date_get_last_errors();
if ($errors['error_count'] > 0) {
echo "Fehler gefunden:\n";
foreach ($errors['errors'] as $position => $message) {
echo " Position {$position}: {$message}\n";
}
} else {
echo "Kein Fehler.\n";
}
Warnung bei überlaufendem Datum erkennen
<?php
// 30. Februar existiert nicht; PHP korrigiert still auf 2. März (Nicht-Schaltjahr)
$date = date_create('2023-02-30');
$errors = date_get_last_errors();
if ($errors['warning_count'] > 0) {
echo "Warnungen:\n";
foreach ($errors['warnings'] as $position => $message) {
echo " Position {$position}: {$message}\n";
}
echo "Erzeugtes Datum: " . $date->format('Y-m-d') . "\n";
}
OOP-Variante mit DateTimeImmutable::getLastErrors()
<?php
// Empfohlene OOP-Alternative zu date_get_last_errors()
$date = DateTimeImmutable::createFromFormat('d.m.Y', '31.04.2024');
$errors = DateTimeImmutable::getLastErrors();
if ($errors !== false && $errors['warning_count'] > 0) {
echo "Ungültiges Datum erkannt. Warnungen: " . $errors['warning_count'] . "\n";
} else {
echo "Datum gültig: " . $date->format('Y-m-d') . "\n";
}
// Wichtig · Fallstricke
Globaler Zustand: date_get_last_errors() bezieht sich auf den global gespeicherten Fehlerstatus des letzten Datums-Parse-Vorgangs. In Anwendungen mit mehreren gleichzeitigen Datums-Operationen (z. B. in Schleifen oder bei Verwendung von Callbacks) kann es zu Race-Conditions kommen. Es empfiehlt sich, direkt nach dem Parse-Aufruf date_get_last_errors() aufzurufen.
PHP 8.3+: Ab PHP 8.3 wird empfohlen, die OOP-Variante DateTime::getLastErrors() oder DateTimeImmutable::getLastErrors() zu verwenden, da diese nicht auf globalen Zustand angewiesen ist.
Keine Exception: date_create() wirft bei Fehlern keine Exception, sondern gibt false zurück. date_get_last_errors() ist daher die einzige Möglichkeit, Fehlerdetails bei der prozeduralen API abzurufen.