Signatur
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
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.';
}
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);
}
// 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.