Signatur
Beschreibung
datefmt_format_object() ist die prozedurale Variante von IntlDateFormatter::formatObject() und ermöglicht die lokalisierte Formatierung eines Datums- oder Kalender-Objekts, ohne vorher explizit einen IntlDateFormatter instanziieren zu müssen. Die Funktion akzeptiert sowohl IntlCalendar- als auch DateTimeInterface-Objekte (z.B. DateTime und DateTimeImmutable).
Über den Parameter $format kann das Ausgabeformat flexibel gesteuert werden: Ein Integer entspricht einer der IntlDateFormatter-Konstanten (FULL, LONG, MEDIUM, SHORT), ein Array mit zwei Integern erlaubt die separate Angabe von Datums- und Uhrzeitformat, und ein String wird als ICU-Musterdefinition (z.B. 'yyyy-MM-dd HH:mm') interpretiert.
Der optionale Parameter $locale bestimmt die Zielsprache und -region der Ausgabe. Wird er weggelassen oder auf null gesetzt, verwendet PHP das Standardgebietsschema (intl.default_locale ini-Einstellung). Diese Funktion ist besonders nützlich, wenn eine schnelle lokalisierte Datumsausgabe ohne manuelles Formatter-Setup benötigt wird.
Zu beachten ist, dass die intl-Extension installiert und aktiv sein muss. Bei IntlCalendar-Objekten wird die im Objekt gesetzte Zeitzone verwendet; bei DateTimeInterface-Objekten wird ebenfalls die jeweilige Zeitzone berücksichtigt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $datetime Pflicht | IntlCalendar|DateTimeInterface | Das zu formatierende Datumsobjekt. Kann ein IntlCalendar- oder ein DateTimeInterface-Objekt (z.B. DateTime, DateTimeImmutable) sein. |
|
| $format | array|string|int|null | null | Das gewünschte Ausgabeformat. Ein int entspricht einer IntlDateFormatter-Konstante (IntlDateFormatter::FULL usw.), ein array mit zwei Integern legt Datums- und Zeitformat separat fest, ein string wird als ICU-Musterdefinition interpretiert. Bei null werden MEDIUM-Stile für Datum und Zeit verwendet. |
| $locale | string|null | null | Das Gebietsschema (Locale), z.B. 'de_DE' oder 'en_US'. Bei null wird das Standard-Locale aus der INI-Einstellung intl.default_locale verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Einfache lokalisierte Datumsausgabe mit DateTime
<?php
// Voraussetzung: ext-intl ist aktiviert
$date = new DateTimeImmutable('2024-06-15 14:30:00', new DateTimeZone('Europe/Berlin'));
// Deutsches vollständiges Datum- und Uhrzeitformat
$formatted = datefmt_format_object($date, IntlDateFormatter::FULL, 'de_DE');
echo $formatted;
// Ausgabe (ca.): Samstag, 15. Juni 2024 um 14:30:00 Mitteleuropäische Sommerzeit
Datum und Uhrzeit mit separaten Formatkonstanten und ICU-Muster
<?php
$date = new DateTime('2024-03-21 09:05:00');
// Separates Format für Datum (LONG) und Zeit (SHORT) auf Englisch
$formatted1 = datefmt_format_object($date, [IntlDateFormatter::LONG, IntlDateFormatter::SHORT], 'en_US');
echo $formatted1 . PHP_EOL;
// Ausgabe (ca.): March 21, 2024 at 9:05 AM
// ICU-Muster für eine individuelle Ausgabe
$formatted2 = datefmt_format_object($date, 'yyyy-MM-dd HH:mm', 'de_DE');
echo $formatted2 . PHP_EOL;
// Ausgabe: 2024-03-21 09:05
Verwendung mit IntlCalendar
<?php
$cal = IntlCalendar::createInstance('Europe/Berlin', 'de_DE');
$cal->setTime(strtotime('2024-12-24 18:00:00') * 1000);
$formatted = datefmt_format_object($cal, IntlDateFormatter::MEDIUM, 'de_DE');
echo $formatted;
// Ausgabe (ca.): 24.12.2024, 18:00:00
// Wichtig · Fallstricke
Erweiterung erforderlich: Die Funktion setzt die PHP-Erweiterung intl voraus. Ist diese nicht installiert oder aktiviert, führt der Aufruf zu einem fatalen Fehler.
Zeitzonenverhalten: Bei IntlCalendar-Objekten wird die im Objekt gesetzte Zeitzone verwendet. Bei DateTimeInterface-Objekten wird die Zeitzone des Objekts für die Ausgabe genutzt. Abweichungen zwischen PHP- und ICU-Zeitzonendatenbanken können zu unterschiedlichen Ergebnissen führen, wenn ICU und PHP-Zeitzonendatenbanken nicht synchron sind.
Locale-Fallback: Ist das angegebene Locale nicht verfügbar, fällt ICU auf ein ähnliches oder das Standardlocale zurück, ohne einen Fehler zu werfen. Dies kann zu unerwarteten Ausgaben führen.