Ein PHP-Datumsformat ist ein String, in dem Buchstaben für Teile des Datums stehen: date('Y-m-d H:i:s') gibt etwas wie 2026-03-14 09:05:07 aus. Y ist das vierstellige Jahr, m der Monat, d der Tag, H die Stunde (24-Stunden-Format), i die Minuten und s die Sekunden; jedes Zeichen, das kein Formatbuchstabe ist, etwa -, / oder :, wird unverändert ausgegeben. Dieselben Format-Strings funktionieren in date() und in DateTimeImmutable::format().
Ändere $format und klicke auf Run. Das Datum ist auf Samstag, den 14. März 2026 um 09:05:07 festgelegt, sodass du genau siehst, was jeder Buchstabe macht:
Ausgabe:
Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM
date($format) formatiert den aktuellen Moment und date($format, $timestamp) einen Timestamp; $date->format($format) formatiert ein Datumsobjekt. Alles andere über Daten, von strtotime() bis zu Zeitzonen, steht auf der Seite zu PHP date().
Formatzeichen für Datumsangaben
Jedes Beispiel unten ist das Ergebnis für 2026-03-14 09:05:07.123456 UTC.
Tag
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
d | Tag des Monats, 2 Ziffern mit führender Null (01 bis 31) | 14 |
j | Tag des Monats ohne führende Null (1 bis 31) | 14 |
D | Kurzer Tagesname, 3 Buchstaben | Sat |
l (kleines L) | Voller Tagesname | Saturday |
N | ISO-Wochentag, 1 (Montag) bis 7 (Sonntag) | 6 |
w | Wochentag, 0 (Sonntag) bis 6 (Samstag) | 6 |
S | Englisches Suffix für den Tag: st, nd, rd oder th. Verwende es nach j | th |
z | Tag des Jahres, ab 0 | 72 |
Woche und Monat
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
W | ISO-8601-Kalenderwoche (Wochen beginnen am Montag) | 11 |
F | Voller Monatsname | March |
M | Kurzer Monatsname, 3 Buchstaben | Mar |
m | Monatszahl mit führender Null (01 bis 12) | 03 |
n | Monatszahl ohne führende Null (1 bis 12) | 3 |
t | Anzahl der Tage im Monat | 31 |
Jahr
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
Y | Volles Jahr, mindestens 4 Ziffern | 2026 |
y | Jahr, 2 Ziffern | 26 |
L | 1 in einem Schaltjahr, sonst 0 | 0 |
o | ISO-8601-Jahr der Wochenzählung (zusammen mit W verwenden) | 2026 |
X | Erweitertes volles Jahr mit Vorzeichen (PHP 8.2+) | +2026 |
x | Erweitertes volles Jahr, Vorzeichen nur bei Bedarf (PHP 8.2+) | 2026 |
Uhrzeit
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
H | Stunde, 24-Stunden-Format, führende Null (00 bis 23) | 09 |
G | Stunde, 24-Stunden-Format, ohne führende Null (0 bis 23) | 9 |
h | Stunde, 12-Stunden-Format, führende Null (01 bis 12) | 09 |
g | Stunde, 12-Stunden-Format, ohne führende Null (1 bis 12) | 9 |
i | Minuten mit führender Null (00 bis 59) | 05 |
s | Sekunden mit führender Null (00 bis 59) | 07 |
a | am oder pm | am |
A | AM oder PM | AM |
v | Millisekunden | 123 |
u | Mikrosekunden (in date() immer 000000, weil es ganze Sekunden nimmt) | 123456 |
B | Swatch-Internetzeit (000 bis 999) | 420 |
Zeitzone
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
e | Bezeichner der Zeitzone | UTC |
T | Abkürzung der Zeitzone | UTC |
P | Abstand zu UTC mit Doppelpunkt | +00:00 |
p | Wie P, aber Z für UTC | Z |
O | Abstand zu UTC ohne Doppelpunkt | +0000 |
Z | Abstand in Sekunden | 0 |
I (großes i) | 1 während der Sommerzeit, sonst 0 | 0 |
Vollständiges Datum und Uhrzeit
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
c | Datum und Uhrzeit nach ISO 8601 | 2026-03-14T09:05:07+00:00 |
r | Datum nach RFC 2822, verwendet in E-Mail-Headern | Sat, 14 Mar 2026 09:05:07 +0000 |
U | Unix-Timestamp (Sekunden seit 1970-01-01 UTC) | 1773479107 |
Dieselbe Tabelle, live: Dieser Block gibt jedes Zeichen für ein Datum deiner Wahl aus. Setz deinen Geburtstag ein, ein Datum am Nachmittag oder eines am Ende eines Schaltjahres:
Buchstaben und Wörter in einem Format ausgeben
Jeder Buchstabe in einem Format-String wird als Formatzeichen gelesen, also gibt 'Today is l' nicht „Today is“ aus: T, o, d, a, y, i und s sind alles Formatzeichen. Setze vor jeden Buchstaben, der unverändert ausgegeben werden soll, einen Backslash. In einem String in doppelten Anführungszeichen ist \t schon ein Tabulator, also verwendest du für Formate mit Backslashes einfache Anführungszeichen:
Ausgabe:
UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 09UTC 14th
Gängige Datumsformate
Der meiste Code braucht nur eine Handvoll Formate. Dieser Block gibt sie als HTML-Tabelle aus, also erscheint sie im Tab Page:
Speichere und vergleiche Daten als Y-m-d oder Y-m-d H:i:s: Strings in dieser Reihenfolge sortieren sich genauso wie die Daten, was bei d/m/Y-Strings nicht der Fall ist.
ISO 8601, DATE_ATOM und andere Standardformate
PHP hat Konstanten für die Formate, die APIs, Feeds und Cookies erwarten. DATE_ATOM (auch DateTimeInterface::ATOM) ist ISO 8601 und RFC 3339, das Format, das JSON-APIs verwenden:
Ausgabe:
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07.000+00:00
Sat, 14 Mar 2026 09:05:07 +0000
Sat, 14 Mar 2026 09:05:07 +0000
Saturday, 14-Mar-2026 09:05:07 UTC
Y-m-d\TH:i:sP
Es gibt auch eine Konstante DATE_ISO8601, aber ihr Offset hat keinen Doppelpunkt (+0000), was ISO 8601 in dieser Form nicht erlaubt; verwende DATE_ATOM.
Japanisches Datumsformat (Y年m月d日)
Zeichen, die keine Formatbuchstaben sind, werden unverändert ausgegeben, und das gilt auch für Kanji, also funktioniert 'Y年n月j日' so, wie es dasteht. n und j lassen die führende Null weg (3月14日), m und d behalten sie (03月14日). Der Tagesname ist der eine Teil, den date() nicht übersetzen kann, weil es nur englische Namen kennt; ordne stattdessen die Zahl w deiner eigenen Liste zu:
Ausgabe:
2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14
Für vollständige Lokalisierung, einschließlich Monatsnamen in anderen Sprachen und der japanischen Ära (令和), formatiert IntlDateFormatter aus der intl-Erweiterung mit Locale-Mustern. Es verwendet ICU-Musterbuchstaben (yyyy, MM, EEEE), nicht die PHP-Zeichen dieser Seite:
<?php
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Asia/Tokyo');
echo $formatter->format(new DateTimeImmutable('2026-03-14')); // 2026年3月14日土曜日
$era = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo $era->format(new DateTimeImmutable('2026-03-14')); // 令和8年3月14日
Ein Datum von einem Format in ein anderes umwandeln
Um 14/03/2026 in 2026-03-14 zu verwandeln, parst du den String mit DateTimeImmutable::createFromFormat() im Format, in dem er geschrieben ist, und formatierst ihn dann neu. Es verwendet dieselben Zeichen wie die Tabelle. Beginne das Format mit !, sonst werden Felder, die du nicht angegeben hast (hier die Uhrzeit), mit dem aktuellen Moment gefüllt:
Ausgabe:
2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
[10] => The parsed date was invalid
)
Bei Daten, die Nutzer eintippen, behandelst du jede Warnung aus getLastErrors() als ungültiges Datum, genauso wie false.
Typische Fehler mit Datumsformaten
Drei Bugs tauchen immer wieder auf: m, wo i gemeint war, Y gegenüber y und strtotime() die Reihenfolge von Tag und Monat raten zu lassen. strtotime() liest Schrägstriche in amerikanischer Reihenfolge Monat/Tag und Bindestriche oder Punkte in der Reihenfolge Tag, Monat, also ergeben dieselben Ziffern zwei verschiedene Daten:
Ausgabe:
09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)
Wenn du das Format der Eingabe kennst, nenn es mit createFromFormat(), statt strtotime() raten zu lassen.
Häufig gestellte Fragen
Was bedeutet date('Y-m-d') in PHP?
Jeder Buchstabe wird durch einen Teil des Datums ersetzt: Y ist das Jahr mit 4 Ziffern, m der Monat mit führender Null und d der Tag mit führender Null, und die Bindestriche werden unverändert ausgegeben. Am 14. März 2026 liefert es 2026-03-14.
Wie wandle ich in PHP ein Datum von einem Format in ein anderes um?
Parse es mit dem Format, in dem es vorliegt, und formatiere es dann mit dem gewünschten: DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') liefert 2026-03-14. createFromFormat() liefert false, wenn der String nicht passt, also prüfst du das zuerst.
Was ist der Unterschied zwischen m und i in einem PHP-Datumsformat?
m ist der Monat (01 bis 12) und i sind die Minuten (00 bis 59). 'H:m' statt 'H:i' zu schreiben ist ein häufiger Bug: Die Uhrzeit zeigt die Monatszahl, wo die Minuten stehen sollten.
Wie formatiere ich in PHP ein Datum als ISO 8601?
Verwende das Zeichen c oder die Konstante DATE_ATOM: $date->format(DATE_ATOM) liefert 2026-03-14T09:05:07+00:00. Vermeide DATE_ISO8601: Sein Offset hat keinen Doppelpunkt (+0000), was kein gültiges ISO 8601 ist.
Wie zeige ich mit PHP date() den Wochentag auf Japanisch an?
date() gibt nur englische Namen aus, also ordnest du die Zahl w (0 für Sonntag bis 6 für Samstag) deiner eigenen Liste zu: ['日','月','火','水','木','金','土'][$date->format('w')]. Mit der intl-Erweiterung kann IntlDateFormatter ganze Daten in jeder Locale formatieren.