Start · Sprachen · PHP · Referenz · datefmt_format_object

datefmt_format_object

Funktion

Formatiert ein <code>IntlCalendar</code>- oder <code>DateTimeInterface</code>-Objekt mithilfe des Intl-DateFormatters zu einem lokalisierten Datums-/Uhrzeit-String.

seit PHP 5.5.0 Kategorie: string

Signatur

datefmt_format_object(IntlCalendar|DateTimeInterface $datetime, array|string|int|null $format = null, string|null $locale = null): string|false

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

Typ
string|false
Beschreibung
Gibt den formatierten Datums-/Uhrzeit-String zurück. Im Fehlerfall (z.B. ungültiges Objekt oder Formatierungsfehler) wird 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
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
March 21, 2024 at 9:05 AM 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
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.