Signatur
Beschreibung
datefmt_parse() ist die prozedurale Entsprechung der Methode IntlDateFormatter::parse(). Sie analysiert den übergebenen String auf Basis der Locale, des Datumsformats und der Zeitzone, die im übergebenen IntlDateFormatter-Objekt konfiguriert sind, und wandelt das Ergebnis in einen Unix-Zeitstempel (Sekunden seit 1970-01-01 00:00:00 UTC) um.
Diese Funktion ist besonders nützlich, wenn lokalisierte Datumsangaben aus Benutzereingaben oder externen Quellen in ein maschinenlesbares Format überführt werden müssen. Im Gegensatz zu strtotime() berücksichtigt datefmt_parse() die sprachspezifischen Datumskonventionen der gewählten Locale, z. B. Tag-/Monatsreihenfolge oder lokalisierte Monatsnamen.
Der optionale Parameter $offset gibt die Zeichenposition an, ab der die Analyse im String beginnt, und wird nach dem Aufruf auf die Position gesetzt, an der die Analyse endete. Dies ermöglicht das schrittweise Verarbeiten von Strings, die neben dem Datum noch weiteren Text enthalten.
Die Funktion gibt bei einem Fehler false zurück. Mit intl_get_error_code() und intl_get_error_message() lassen sich dabei detaillierte Fehlerinformationen abrufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Ein IntlDateFormatter-Objekt, das Locale, Datumsstil, Uhrzeitstil, Zeitzone und das verwendete Kalenderformat definiert. |
|
| $string Pflicht | string | Der zu parsende Datums-/Zeit-String, der dem Format des IntlDateFormatter entsprechen muss. |
|
| $offset | int | null | Zeichenposition, ab der die Analyse im String beginnt (0-basiert). Nach dem Aufruf enthält diese Variable die Position, bis zu der geparst wurde. Wird null übergeben, beginnt die Analyse am Stringanfang. |
Rückgabewert
false zurückgegeben.Beispiele
Deutschen Datumsstring in Zeitstempel umwandeln
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::LONG,
IntlDateFormatter::NONE,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
$timestamp = datefmt_parse($formatter, '15. März 2024');
if ($timestamp !== false) {
echo date('Y-m-d', $timestamp); // Ausgabe in ISO-Format
} else {
echo 'Parsing fehlgeschlagen: ' . intl_get_error_message();
}
Offset-Parameter zum schrittweisen Parsen nutzen
<?php
$formatter = datefmt_create(
'en_US',
IntlDateFormatter::SHORT,
IntlDateFormatter::SHORT,
'America/New_York',
IntlDateFormatter::GREGORIAN
);
$input = '03/15/24, 2:30 PM – weitere Informationen';
$offset = 0;
$timestamp = datefmt_parse($formatter, $input, $offset);
if ($timestamp !== false) {
echo 'Zeitstempel: ' . $timestamp . PHP_EOL;
echo 'Geparst bis Position: ' . $offset . PHP_EOL;
echo 'Restlicher String: ' . substr($input, $offset) . PHP_EOL;
} else {
echo 'Fehler: ' . intl_get_error_message();
}
// Wichtig · Fallstricke
Zeitzone beachten: Der zurückgegebene Unix-Zeitstempel bezieht sich immer auf UTC. Die im Formatter konfigurierte Zeitzone beeinflusst jedoch, wie der String interpretiert wird. Stellen Sie sicher, dass die korrekte Zeitzone gesetzt ist, um fehlerhafte Umrechnungen zu vermeiden.
Locale-Abhängigkeit: Das Parsing ist stark von der gewählten Locale abhängig. Ein mit de_DE erzeugter Formatter kann einen englischen Datumsstring möglicherweise nicht korrekt verarbeiten und umgekehrt.
Fehlerbehandlung: Ein Rückgabewert von false kann auch auftreten, wenn der String zwar teilweise erkannt wurde, aber nicht vollständig geparst werden konnte. Nutzen Sie intl_get_error_code() und intl_get_error_message() zur Diagnose. Alternativ kann die OOP-Methode IntlDateFormatter::parse() verwendet werden, die dieselbe Funktionalität bietet.