Signatur
Beschreibung
DateMalformedIntervalStringException ist eine spezifische Ausnahme, die ausgelöst wird, wenn der an DateInterval::__construct() übergebene $duration-String nicht dem erwarteten ISO-8601-Dauerformat entspricht (z. B. P1Y2M3DT4H5M6S). Sie ist Teil der neuen, konsistenteren Fehlerbehandlung im Datum/Zeit-API, das seit PHP 8.3 bei Fehleingaben Ausnahmen statt Warnungen wirft.
Vor PHP 8.3 konnte ein ungültiger Intervall-String zu einem DateInterval-Objekt mit unerwarteten Nullwerten führen oder eine Warnung auslösen, ohne die Programmausführung zu unterbrechen. Durch die neue Ausnahme lässt sich eine fehlerhafte Eingabe zuverlässig abfangen und behandeln.
Die Klasse erbt von DateException, welche ihrerseits von RuntimeException erbt. In einem try/catch-Block kann man gezielt auf Fehlformatierungen reagieren, etwa um dem Benutzer eine verständliche Fehlermeldung zu geben oder einen Standardwert zu verwenden.
Typische Anwendungsfälle sind Formulareingaben oder API-Daten, bei denen ein Dauerstring aus einer externen Quelle stammt und zunächst validiert werden muss.
Beispiele
Ungültigen Intervall-String abfangen
<?php
use DateMalformedIntervalStringException;
$input = 'kein-gültiger-intervall';
try {
$interval = new DateInterval($input);
echo 'Intervall: ' . $interval->format('%y Jahre, %m Monate');
} catch (DateMalformedIntervalStringException $e) {
echo 'Fehler: Ungültiger Intervall-String – ' . $e->getMessage();
}
Benutzereingabe validieren und Standardwert verwenden
<?php
use DateMalformedIntervalStringException;
function parseInterval(string $duration): DateInterval {
try {
return new DateInterval($duration);
} catch (DateMalformedIntervalStringException $e) {
// Fallback: 1 Tag als Standard-Intervall
error_log('Ungültiger Intervall-String: ' . $duration);
return new DateInterval('P1D');
}
}
$interval = parseInterval('P2W'); // Gültig: 2 Wochen
echo $interval->format('%d Tage') . PHP_EOL;
$interval = parseInterval('X99Z'); // Ungültig → Fallback
echo $interval->format('%d Tage') . PHP_EOL;
// Wichtig · Fallstricke
Hinweis zur Version: DateMalformedIntervalStringException steht erst ab PHP 8.3 zur Verfügung. In älteren PHP-Versionen warf DateInterval::__construct() bei ungültigem Format lediglich eine Exception (oder in manchen Fällen nur eine Warnung). Code, der auf PHP < 8.3 abwärtskompatibel sein soll, sollte daher den allgemeineren Exception-Typ fangen.
Gültige Formate: Der Intervall-String muss dem ISO-8601-Dauerformat entsprechen, z. B. P1Y (1 Jahr), PT30M (30 Minuten) oder P1Y2M3DT4H5M6S. Wochenkürzel wie P2W sind ebenfalls gültig.