Start · Sprachen · PHP · Referenz · datefmt_set_lenient

datefmt_set_lenient

Funktion

Setzt den Nachsichtigkeitsmodus (Lenient-Modus) des <code>IntlDateFormatter</code>-Parsers, um zu steuern, wie tolerant die Datumsanalyse ist.

seit PHP 5.3.0 Kategorie: string

Signatur

datefmt_set_lenient(IntlDateFormatter $formatter, bool $lenient): bool

Beschreibung

datefmt_set_lenient() ist die prozedurale Variante der Methode IntlDateFormatter::setLenient() und legt fest, ob der Parser beim Analysieren von Datumszeichenketten im Nachsichtigkeitsmodus (lenient mode) arbeitet oder nicht.

Im nachsichtigen Modus (true) werden ungenaue oder fehlerhafte Datumseingaben soweit möglich akzeptiert und interpretiert. Ist der Modus deaktiviert (false), verarbeitet der Parser nur exakt gültige Eingaben und schlägt bei Abweichungen fehl. Dies ist besonders beim Verarbeiten von Benutzereingaben relevant, wo Daten streng validiert werden sollen.

Standardmäßig ist der Nachsichtigkeitsmodus aktiviert. Für Anwendungen, die eine strikte Eingabevalidierung erfordern (z. B. Formulare, APIs), empfiehlt es sich, den Modus auf false zu setzen, um fehlerhafte Datumseingaben zuverlässig abzufangen.

Die Funktion gibt true bei Erfolg zurück. Der aktuelle Modus kann mit datefmt_is_lenient() abgefragt werden.

Parameter

Name Typ Default Beschreibung
$formatter Pflicht IntlDateFormatter Das IntlDateFormatter-Objekt, dessen Nachsichtigkeitsmodus geändert werden soll.
$lenient Pflicht bool Gibt an, ob der Nachsichtigkeitsmodus aktiviert (true) oder deaktiviert (false) sein soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler.

Beispiele

Nachsichtigen Modus deaktivieren und ungültige Eingabe ablehnen

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

// Standardmäßig ist der Nachsichtigkeitsmodus aktiv
var_dump(datefmt_is_lenient($formatter)); // bool(true)

// Nachsichtigkeitsmodus deaktivieren
datefmt_set_lenient($formatter, false);
var_dump(datefmt_is_lenient($formatter)); // bool(false)

// Strikt ungültige Eingabe parsen
$result = datefmt_parse($formatter, '32. Januar 2024');
if ($result === false) {
    echo 'Ungültiges Datum wurde abgelehnt: ' . datefmt_get_error_message($formatter);
} else {
    echo 'Geparster Timestamp: ' . $result;
}
bool(true) bool(false) Ungültiges Datum wurde abgelehnt: Date parsing failed: U_PARSE_ERROR

Nachsichtigen Modus aktivieren und fehlerhafte Eingabe tolerieren

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

// Nachsichtigkeitsmodus aktivieren (ist standardmäßig bereits aktiv)
datefmt_set_lenient($formatter, true);
var_dump(datefmt_is_lenient($formatter)); // bool(true)

// Nachsichtige Eingabe parsen — der 32. Januar wird als 1. Februar interpretiert
$result = datefmt_parse($formatter, '32. Januar 2024');
if ($result !== false) {
    echo 'Geparster Timestamp: ' . $result . "\n";
    echo 'Datum: ' . date('d.m.Y', $result);
} else {
    echo 'Fehler: ' . datefmt_get_error_message($formatter);
}
bool(true) Geparster Timestamp: 1706745600 Datum: 01.02.2024

// Wichtig · Fallstricke

Sicherheitshinweis: Bei der Verarbeitung von Benutzereingaben sollte der Nachsichtigkeitsmodus grundsätzlich deaktiviert werden (false), um unerwartete Datums-Interpretationen zu verhindern. Ein aktivierter Modus kann dazu führen, dass ungültige Daten stillschweigend akzeptiert und falsch interpretiert werden, was zu logischen Fehlern in der Anwendung führt.

Alternativ zur prozeduralen Funktion kann die objektorientierte Variante IntlDateFormatter::setLenient() verwendet werden. Beide Methoden sind funktional identisch.