Start · Sprachen · PHP · Referenz · IntlDateFormatter

IntlDateFormatter

Klasse

Formatiert und parst Datums- und Zeitangaben Locale-abhängig gemäß ICU-Regeln für internationalisierte Ausgaben.

seit PHP 5.3.0 Kategorie: string

Signatur

class IntlDateFormatter

Beschreibung

IntlDateFormatter ist Teil der Intl-Erweiterung und ermöglicht die Locale-bewusste Formatierung und das Parsen von Datums- und Zeitwerten. Im Gegensatz zu date() oder strftime() werden die Ausgaben automatisch an das jeweilige Gebietsschema (z. B. de_DE, fr_FR) angepasst, sodass Wochentage, Monatsnamen und Datumsreihenfolge korrekt lokalisiert erscheinen.

Die Klasse unterstützt verschiedene Formatierungsstile (FULL, LONG, MEDIUM, SHORT, NONE), eigene ICU-Musterdefinitionen per setPattern() sowie unterschiedliche Kalendersysteme (Gregorianisch, Islamisch, Japanisch usw.) und Zeitzonen. Damit ist sie die bevorzugte Wahl für mehrsprachige Anwendungen und APIs, die Datumsangaben für verschiedene Regionen ausgeben müssen.

Mit format() wandelt man einen Unix-Timestamp, ein DateTime- oder IntlCalendar-Objekt in einen lokalisierten String um. Umgekehrt konvertiert parse() einen solchen String zurück in einen Unix-Timestamp. Fehlerdetails können über getErrorCode() und getErrorMessage() abgerufen werden.

Ab PHP 5.5 kann IntlDateFormatter direkt mit IntlCalendar-Objekten arbeiten, was eine präzise Steuerung über Kalender und Zeitzone ermöglicht. Die statische Fabrikmethode IntlDateFormatter::create() bietet eine alternative Instanziierung und gibt im Fehlerfall null zurück statt eine Ausnahme zu werfen.

Parameter

Name Typ Default Beschreibung
$locale Pflicht string|null Das Gebietsschema (z. B. 'de_DE', 'en_US'). null verwendet das Standard-Locale aus Locale::getDefault().
$dateType Pflicht int Formatierungsstil für das Datum. Eine der Konstanten IntlDateFormatter::FULL, LONG, MEDIUM, SHORT oder NONE.
$timeType Pflicht int Formatierungsstil für die Uhrzeit. Dieselben Konstanten wie bei dateType.
$timezone DateTimeZone|IntlTimeZone|string|null null Die Zeitzone als Objekt oder IANA-Bezeichner (z. B. 'Europe/Berlin'). null verwendet die PHP-Standard-Zeitzone.
$calendar IntlCalendar|int|null null Kalendertyp oder IntlCalendar-Objekt. IntlDateFormatter::GREGORIAN (Standard) oder IntlDateFormatter::TRADITIONAL. null wählt den für das Locale üblichen Kalender.
$pattern string '' Optionales ICU-Datumsmuster (z. B. 'dd.MM.yyyy HH:mm'). Überschreibt die Stil-Konstanten dateType und timeType, wenn gesetzt.

Beispiele

Lokalisiertes Datum für Deutschland ausgeben

<?php
$formatter = new IntlDateFormatter(
    'de_DE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::SHORT,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

$timestamp = mktime(14, 30, 0, 6, 15, 2024);
echo $formatter->format($timestamp);
Samstag, 15. Juni 2024 um 14:30

Datum mit benutzerdefiniertem ICU-Muster formatieren

<?php
$formatter = new IntlDateFormatter(
    'de_DE',
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN,
    'dd.MM.yyyy HH:mm:ss'
);

echo $formatter->format(new DateTime('2024-03-25 09:15:00'));
25.03.2024 09:15:00

Lokalisierten Datums-String parsen

<?php
$formatter = new IntlDateFormatter(
    'fr_FR',
    IntlDateFormatter::LONG,
    IntlDateFormatter::NONE,
    'Europe/Paris'
);

$timestamp = $formatter->parse('15 juin 2024');
if ($timestamp !== false) {
    echo date('Y-m-d', $timestamp); // Ausgabe als ISO-Datum
} else {
    echo 'Parse-Fehler: ' . $formatter->getErrorMessage();
}
2024-06-15

Mehrsprachige Datumsausgabe im Vergleich

<?php
$locales = ['de_DE', 'en_US', 'ja_JP', 'ar_SA'];
$timestamp = mktime(0, 0, 0, 12, 24, 2024);

foreach ($locales as $locale) {
    $fmt = new IntlDateFormatter(
        $locale,
        IntlDateFormatter::LONG,
        IntlDateFormatter::NONE
    );
    echo $locale . ': ' . $fmt->format($timestamp) . PHP_EOL;
}
de_DE: 24. Dezember 2024 en_US: December 24, 2024 ja_JP: 2024年12月24日 ar_SA: ٢٤ ديسمبر ٢٠٢٤

// Wichtig · Fallstricke

Erweiterung erforderlich: IntlDateFormatter setzt die PHP-Erweiterung intl voraus, die über --enable-intl kompiliert bzw. als DLL aktiviert sein muss. Die Klasse ist nicht im PHP-Standard-Umfang enthalten.

ICU-Version beachten: Das Verhalten der Formatierung hängt von der installierten ICU-Bibliothek ab. Unterschiedliche Serverumgebungen können leicht abweichende Ausgaben für dasselbe Locale liefern. Die ICU-Version kann über INTL_ICU_VERSION abgerufen werden.

Deprecated: strftime() ist seit PHP 8.1 veraltet — IntlDateFormatter ist der empfohlene Ersatz für lokalisierte Datumsformatierung.

Fehlerbehebung: format() gibt false zurück, wenn der übergebene Wert ungültig ist. parse() gibt false zurück, wenn der String nicht dem erwarteten Muster entspricht. Immer getErrorCode() und getErrorMessage() prüfen.