Start · Sprachen · PHP · Referenz · datefmt_is_lenient

datefmt_is_lenient

Funktion

Gibt zurück, ob der angegebene <code>IntlDateFormatter</code> im nachsichtigen (lenient) Modus arbeitet.

seit PHP 5.3.0 Kategorie: string

Signatur

datefmt_is_lenient(IntlDateFormatter $formatter): bool

Beschreibung

datefmt_is_lenient() ist die prozedurale Variante der Methode IntlDateFormatter::isLenient(). Sie prüft, ob der Formatter im sogenannten lenient (nachsichtigen) Modus betrieben wird.

Im nachsichtigen Modus akzeptiert der IntlDateFormatter auch mehrdeutige oder leicht fehlerhafte Datums- und Zeitangaben, beispielsweise den 32. Januar, der dann automatisch als 1. Februar interpretiert wird. Im strikten Modus (lenient = false) hingegen werden solche Eingaben als ungültig abgelehnt.

Diese Funktion ist nützlich, um den aktuellen Zustand eines Formatters zu ermitteln, bevor man ihn möglicherweise mit datefmt_set_lenient() ändert oder bevor man kritische Datumswerte parst, bei denen Fehlertoleranz unerwünscht ist.

Standardmäßig ist ein neu erstellter IntlDateFormatter im nachsichtigen Modus (true).

Parameter

Name Typ Default Beschreibung
$formatter Pflicht IntlDateFormatter Das IntlDateFormatter-Objekt, dessen Nachsichtigkeit abgefragt werden soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Formatter im nachsichtigen Modus arbeitet, andernfalls false.

Beispiele

Nachsichtigkeit eines Formatters prüfen

<?php
$fmt = datefmt_create(
    'de_DE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

// Standardmäßig ist der Formatter nachsichtig
var_dump(datefmt_is_lenient($fmt));

// Auf strikten Modus umschalten
datefmt_set_lenient($fmt, false);
var_dump(datefmt_is_lenient($fmt));
bool(true) bool(false)

Nachsichtigkeit vor dem Parsen prüfen und ggf. deaktivieren

<?php
$fmt = datefmt_create(
    'de_DE',
    IntlDateFormatter::SHORT,
    IntlDateFormatter::NONE,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

// Sicherstellung: striktes Parsen verwenden
if (datefmt_is_lenient($fmt)) {
    datefmt_set_lenient($fmt, false);
    echo "Lenient-Modus wurde deaktiviert.\n";
}

// Nun werden ungültige Daten wie '32.01.2024' abgelehnt
$timestamp = datefmt_parse($fmt, '32.01.2024');
if ($timestamp === false) {
    echo "Ungültiges Datum abgelehnt: " . datefmt_get_error_message($fmt) . "\n";
} else {
    echo "Parsed: " . date('Y-m-d', $timestamp) . "\n";
}
Lenient-Modus wurde deaktiviert. Ungültiges Datum abgelehnt: Date parsing failed: U_PARSE_ERROR

// Wichtig · Fallstricke

Vorsicht beim Parsen von Benutzereingaben: Der standardmäßig aktive nachsichtige Modus kann dazu führen, dass scheinbar ungültige Datumsangaben stillschweigend uminterpretiert werden (z. B. wird der 40. März zum 9. April). Für sicherheitskritische oder validierungsintensive Anwendungen sollte der Modus mit datefmt_set_lenient($fmt, false) deaktiviert werden.

Die objektorientierte Entsprechung ist IntlDateFormatter::isLenient().