Start · Sprachen · PHP · Referenz · datefmt_localtime

datefmt_localtime

Funktion

Parst einen lokalisierten Datums-/Zeitstring und gibt ein assoziatives Array mit den einzelnen Zeitfeldern zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

datefmt_localtime(IntlDateFormatter $formatter, string $string, int &$offset = null): array|false

Beschreibung

datefmt_localtime() ist die prozedurale Variante von IntlDateFormatter::localtime(). Sie analysiert einen lokalisierten Datums-/Zeitstring anhand des im IntlDateFormatter-Objekt definierten Musters und der Locale, und zerlegt das Ergebnis in ein feldbasiertes Array, das der Struktur von PHPs localtime()-Rückgabewert entspricht.

Das zurückgegebene Array enthält die Schlüssel tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday und tm_isdst — genauso wie das POSIX-struct tm. Dieser Aufbau macht das Ergebnis kompatibel mit anderen C-nahen Zeitfunktionen.

Typische Einsatzgebiete sind die Verarbeitung von benutzereingegebenen, kulturspezifisch formatierten Datumswerten, z. B. in Webanwendungen mit Mehrsprachigkeit, wo Datum-Strings in verschiedenen Locales (Deutsch, Französisch, Japanisch usw.) korrekt interpretiert werden müssen.

Der optionale Parameter $offset gibt an, an welcher Zeichenposition im Eingabe-String der Parser beginnen soll, und wird nach dem Aufruf auf die Position nach dem zuletzt verarbeiteten Zeichen gesetzt — nützlich, wenn mehrere Werte sequenziell aus einem String extrahiert werden.

Parameter

Name Typ Default Beschreibung
$formatter Pflicht IntlDateFormatter Ein IntlDateFormatter-Objekt, das Locale, Datums- und Zeitformat sowie optional ein Muster definiert, nach dem der String geparst wird.
$string Pflicht string Der zu parsende lokalisierte Datums-/Zeitstring, z. B. '12. März 2024' oder '03/12/2024'.
$offset int null Startposition (0-basiert) im String. Nach dem Aufruf enthält die Variable die Position nach dem letzten verarbeiteten Zeichen. Wird null übergeben, startet der Parser am Anfang des Strings.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein assoziatives Array mit den POSIX-Zeitfeldern tm_sec, tm_min, tm_hour, tm_mday, tm_mon (0–11), tm_year (Jahre seit 1900), tm_wday (0=Sonntag), tm_yday (0–365) und tm_isdst. Gibt false zurück, wenn der String nicht geparst werden konnte.

Beispiele

Deutschen Datums-String in Zeitfelder zerlegen

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

$result = datefmt_localtime($fmt, '12. März 2024');

if ($result !== false) {
    echo 'Tag:   ' . $result['tm_mday'] . PHP_EOL;
    echo 'Monat: ' . ($result['tm_mon'] + 1) . PHP_EOL; // tm_mon ist 0-basiert
    echo 'Jahr:  ' . ($result['tm_year'] + 1900) . PHP_EOL; // tm_year = Jahre seit 1900
} else {
    echo 'Parsen fehlgeschlagen.';
}
Tag: 12 Monat: 3 Jahr: 2024

Offset-Parameter nutzen, um Position nach dem Parsen zu ermitteln

<?php
$fmt = datefmt_create(
    'en_US',
    IntlDateFormatter::SHORT,
    IntlDateFormatter::SHORT,
    'UTC',
    IntlDateFormatter::GREGORIAN
);

$input  = '03/12/2024, 14:30 PM and more text';
$offset = 0;

$result = datefmt_localtime($fmt, $input, $offset);

if ($result !== false) {
    echo 'Stunde: ' . $result['tm_hour'] . PHP_EOL;
    echo 'Minute: ' . $result['tm_min']  . PHP_EOL;
    echo 'Offset nach Parse: ' . $offset . PHP_EOL;
} else {
    echo 'Parsen fehlgeschlagen: ' . datefmt_get_error_message($fmt);
}
Stunde: 14 Minute: 30 Offset nach Parse: 19

// Wichtig · Fallstricke

Achtung bei tm_mon und tm_year: tm_mon ist 0-basiert (Januar = 0, Dezember = 11), und tm_year enthält die Anzahl der Jahre seit 1900. Um das übliche Kalenderjahr zu erhalten, muss $result['tm_year'] + 1900 berechnet werden.

Schlägt das Parsen fehl, kann der Fehlergrund mit datefmt_get_error_code() und datefmt_get_error_message() abgefragt werden.

Diese Funktion setzt die ICU-Bibliothek (International Components for Unicode) voraus, die über die intl-Extension eingebunden wird. Stellen Sie sicher, dass extension=intl in der php.ini aktiviert ist.