Signatur
Beschreibung
datefmt_format() ist die prozedurale Variante von IntlDateFormatter::format() und formatiert einen Datums- oder Zeitwert anhand der im IntlDateFormatter-Objekt hinterlegten Locale, des Datums- und Zeitstils sowie der Zeitzone zu einem menschenlesbaren, lokalisierten String.
Die Funktion akzeptiert als Eingabe verschiedene Typen: Unix-Timestamps (Integer oder Float), Datums-Arrays im Stil von localtime(), DateTimeInterface-Objekte (z. B. DateTime, DateTimeImmutable) sowie IntlCalendar-Objekte. Dies macht sie sehr flexibel in verschiedenen Anwendungssituationen.
Im Gegensatz zu PHPs eingebauter date()-Funktion unterstützt datefmt_format() vollständige Internationalisierung: Monats- und Wochentagsnamen, Kalenderformate und Uhrzeitdarstellungen werden korrekt für die jeweilige Sprache und Region ausgegeben. Sie eignet sich daher ideal für mehrsprachige Anwendungen oder überall dort, wo eine locale-gerechte Datumsdarstellung erforderlich ist.
Schlägt die Formatierung fehl, gibt die Funktion false zurück; mit datefmt_get_error_message() lässt sich die genaue Fehlerursache ermitteln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Ein IntlDateFormatter-Objekt, das Locale, Datumsstil, Zeitstil und Zeitzone enthält. |
|
| $value Pflicht | IntlCalendar|DateTimeInterface|array|string|int|float | Der zu formatierende Wert. Kann ein Unix-Timestamp (Integer/Float), ein DateTimeInterface-Objekt, ein IntlCalendar-Objekt oder ein Array im Format von localtime() sein. |
Rückgabewert
false zurückgegeben; die Fehlerursache kann mit datefmt_get_error_message() abgefragt werden.Beispiele
Datum im deutschen Format ausgeben
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::LONG,
IntlDateFormatter::NONE,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
$timestamp = mktime(0, 0, 0, 7, 4, 2025);
$result = datefmt_format($formatter, $timestamp);
echo $result;
Datum und Uhrzeit mit DateTimeImmutable und verschiedenen Locales
<?php
$date = new DateTimeImmutable('2025-03-15 14:30:00', new DateTimeZone('Europe/Berlin'));
$locales = ['de_DE', 'en_US', 'fr_FR', 'ja_JP'];
foreach ($locales as $locale) {
$formatter = datefmt_create(
$locale,
IntlDateFormatter::MEDIUM,
IntlDateFormatter::SHORT,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
echo $locale . ': ' . datefmt_format($formatter, $date) . PHP_EOL;
}
Fehlerbehandlung bei ungültiger Eingabe
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::SHORT,
IntlDateFormatter::SHORT,
'Europe/Berlin'
);
$result = datefmt_format($formatter, PHP_INT_MAX);
if ($result === false) {
echo 'Fehler: ' . datefmt_get_error_message($formatter);
} else {
echo $result;
}
// Wichtig · Fallstricke
Zeichenkodierung: Die Ausgabe von datefmt_format() ist immer in UTF-8 kodiert, unabhängig von der internen Kodierung der PHP-Anwendung.
Float-Timestamps: Bei Übergabe eines Floats als Timestamp wird der Bruchteil als Subsekundenanteil interpretiert. Dies ist nützlich, wenn Millisekunden-Genauigkeit benötigt wird.
Timezone-Priorität: Wenn ein DateTimeInterface- oder IntlCalendar-Objekt übergeben wird, dessen Zeitzone von der im Formatter eingestellten abweicht, wird die Zeitzone des Formatters für die Ausgabe verwendet — dies kann zu überraschenden Ergebnissen führen.
OOP-Äquivalent: Statt der prozeduralen Form kann auch die objektorientierte Methode IntlDateFormatter::format($value) verwendet werden, die identisch funktioniert.