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