Signatur
Beschreibung
DateMalformedStringException ist eine spezialisierte Ausnahme innerhalb der Datum/Uhrzeit-Hierarchie von PHP. Sie wird ausgelöst, wenn eine Zeichenkette, die ein Datum oder eine Uhrzeit repräsentieren soll, nicht korrekt geparst werden kann – etwa weil das Format unbekannt oder die Zeichenkette syntaktisch fehlerhaft ist.
Bis PHP 8.3 lösten Funktionen wie new DateTime() oder new DateTimeImmutable() bei ungültigen Eingaben lediglich Warnungen aus oder gaben false zurück, ohne eine strukturierte Ausnahme zu werfen. Seit PHP 8.3 wird konsequent eine Exception geworfen, sodass Fehler präziser und typsicherer abgefangen werden können.
DateMalformedStringException erbt von DateException, die wiederum von RuntimeException erbt. Dadurch lässt sie sich sowohl spezifisch als auch allgemein über deren Elternklassen abfangen. Besonders bei der Verarbeitung von Benutzereingaben oder externen Datenquellen ist ein gezieltes Abfangen dieser Ausnahme empfehlenswert.
Die Klasse besitzt keinen eigenen Konstruktor; sie verwendet den Standard-Konstruktor von Exception mit den üblichen Parametern $message, $code und $previous.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message | string | "" | Die Fehlermeldung, die die Ausnahme beschreibt. |
| $code | int | 0 | Ein optionaler numerischer Fehlercode. |
| $previous | ?Throwable | null | Eine optional vorherige Ausnahme, die zur Verkettung von Ausnahmen verwendet wird. |
Beispiele
Ungültige Datumszeichenkette abfangen
<?php
try {
$date = new DateTimeImmutable('kein-gültiges-datum');
} catch (DateMalformedStringException $e) {
echo 'Ungültiges Datum: ' . $e->getMessage();
}
Unterschiedliche Fehlertypen der Datum-Hierarchie gezielt abfangen
<?php
function parseDatum(string $eingabe): DateTimeImmutable {
try {
return new DateTimeImmutable($eingabe);
} catch (DateMalformedStringException $e) {
// Spezifisch: fehlerhafte Datumszeichenkette
throw new InvalidArgumentException(
'Das Datum "' . $eingabe . '" ist ungültig: ' . $e->getMessage(),
0,
$e
);
} catch (DateException $e) {
// Allgemein: sonstiger Datum-Fehler
throw new RuntimeException('Datumsfehler: ' . $e->getMessage(), 0, $e);
}
}
try {
$datum = parseDatum('32.13.2024');
} catch (InvalidArgumentException $e) {
echo $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Hinweis zur Versionskompatibilität: Vor PHP 8.3 warfen DateTime und DateTimeImmutable bei fehlerhaften Zeichenketten keine Ausnahmen, sondern lösten Warnungen aus. Code, der auf ältere PHP-Versionen abzielen muss, sollte stattdessen auf Rückgabewert false sowie DateTime::getLastErrors() prüfen.
Sicherheitshinweis: Bei der Verarbeitung von Benutzereingaben als Datumszeichenketten sollte immer eine Ausnahmebehandlung erfolgen, um unvorhergesehene Programmabbrüche zu vermeiden. Die Fehlermeldung der Ausnahme sollte nicht ungefiltert an Endnutzer ausgegeben werden, da sie interne Hinweise auf das Parsing-Verhalten enthält.