Start · Sprachen · PHP · Referenz · datefmt_parse

datefmt_parse

Funktion

Parst einen Datums-/Zeit-String anhand des Formats eines <code>IntlDateFormatter</code>-Objekts und gibt einen Unix-Zeitstempel zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

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

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

Typ
int|false
Beschreibung
Gibt bei Erfolg einen Unix-Zeitstempel (Integer) zurück. Bei einem Parse-Fehler wird 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();
}
2024-03-15

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();
}
Zeitstempel: 1710519000 Geparst bis Position: 14 Restlicher String: – weitere Informationen

// 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.