Signatur
Beschreibung
date_format() ist die prozedurale Variante der Methode DateTime::format() bzw. DateTimeImmutable::format(). Sie erwartet ein Objekt, das das Interface DateTimeInterface implementiert, sowie einen Formatstring und liefert das Datum und/oder die Uhrzeit als formatierten String zurück.
Der Formatstring folgt exakt denselben Regeln wie bei der Funktion date(): Buchstaben wie Y (4-stelliges Jahr), m (Monat mit führender Null), d (Tag mit führender Null), H (Stunde 24h), i (Minuten) und s (Sekunden) stehen als Platzhalter. Nicht erkannte Zeichen werden unverändert ausgegeben, Sonderzeichen können mit einem vorangestellten Backslash \ maskiert werden.
Im Gegensatz zur Funktion date() arbeitet date_format() immer auf einem bereits vorhandenen DateTimeInterface-Objekt und benötigt keinen Unix-Timestamp als Parameter. Das macht sie besonders gut geeignet, wenn Datum-Objekte aus Datenbanken, Formularen oder date_create()/new DateTime() weiterverarbeitet werden sollen.
Soll das Datum-Objekt unveränderlich bleiben, empfiehlt sich die Verwendung von DateTimeImmutable anstelle von DateTime. Beide Klassen implementieren DateTimeInterface und sind daher mit date_format() kompatibel.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTimeInterface | Ein DateTime-, DateTimeImmutable- oder anderes Objekt, das DateTimeInterface implementiert. |
|
| $format Pflicht | string | Formatstring nach den Regeln der date()-Funktion, z. B. 'Y-m-d H:i:s' oder 'd.m.Y'. Buchstaben, die als Platzhalter dienen, müssen ggf. mit \ maskiert werden, wenn sie wörtlich erscheinen sollen. |
Rückgabewert
false zurückgegeben, was in der Praxis jedoch selten auftritt, da PHP schon bei der Objekt-Erstellung einen Fehler wirft.Beispiele
Datum in deutschem Format ausgeben
<?php
$datum = date_create('2024-03-15 09:30:00');
echo date_format($datum, 'd.m.Y H:i:s');
// Ausgabe: 15.03.2024 09:30:00
Aktuelles Datum als ISO-8601-String formatieren
<?php
$jetzt = new DateTimeImmutable();
$iso = date_format($jetzt, 'Y-m-d\TH:i:sP');
echo $iso;
// Ausgabe (Beispiel): 2024-03-15T09:30:00+01:00
Datum aus Datenbank formatieren und Wochentag auf Deutsch ausgeben
<?php
// Typisches Szenario: Datum aus Datenbank-Abfrage weiterverarbeiten
$dbWert = '2024-12-24'; // aus der Datenbank
$datum = date_create($dbWert);
$wochentage = [
'Mon' => 'Montag', 'Tue' => 'Dienstag', 'Wed' => 'Mittwoch',
'Thu' => 'Donnerstag', 'Fri' => 'Freitag', 'Sat' => 'Samstag', 'Sun' => 'Sonntag'
];
$kuerzel = date_format($datum, 'D');
$tag = date_format($datum, 'd');
$monat = date_format($datum, 'm');
$jahr = date_format($datum, 'Y');
echo $wochentage[$kuerzel] . ', ' . $tag . '.' . $monat . '.' . $jahr;
// Ausgabe: Dienstag, 24.12.2024
// Wichtig · Fallstricke
Maskierung von Buchstaben: Sollen Buchstaben, die als Format-Platzhalter interpretiert werden würden (z. B. T, Y), wörtlich im Ausgabe-String erscheinen, müssen sie im Formatstring mit einem Backslash maskiert werden: '\T'. Im PHP-String-Literal ergibt das doppelte Backslashes: 'Y-m-d\\TH:i:s'.
Zeitzone: Das Ergebnis basiert auf der Zeitzone des übergebenen Objekts. Bei der Arbeit mit verschiedenen Zeitzonen sollte darauf geachtet werden, dass das Objekt mit der korrekten Zeitzone erstellt wurde, z. B. mit new DateTimeImmutable('now', new DateTimeZone('Europe/Berlin')).
OOP-Stil bevorzugen: In modernem PHP-Code wird die objektorientierte Variante $datum->format('Y-m-d') häufig dem prozeduralen date_format($datum, 'Y-m-d') vorgezogen, da sie lesbarer ist und besser mit modernen PHP-Standards wie DateTimeImmutable harmoniert.