Start · Sprachen · PHP · Referenz · DateMalformedStringException

DateMalformedStringException

Klasse

Wird geworfen, wenn eine ungültige Datum/Uhrzeit-Zeichenkette erkannt wird, z. B. bei <code>new DateTimeImmutable('ungültig')</code>.

seit PHP 8.3.0 Kategorie: error

Signatur

class DateMalformedStringException extends DateException

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();
}
Ungültiges Datum: Failed to parse time string (kein-gültiges-datum) at position 0 (k): The timezone could not be found in the database

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;
}
Das Datum "32.13.2024" ist ungültig: Failed to parse time string (32.13.2024) at position 0 (3): The timezone could not be found in the database

// 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.