Menu

PHP Datumsformat: jedes Formatzeichen von date()

Ein PHP-Datumsformat ist ein String aus Buchstaben wie 'Y-m-d H:i:s', wobei Y das vierstellige Jahr ist, m der Monat, d der Tag, H die Stunde, i die Minuten und s die Sekunden. Hier steht jedes Formatzeichen mit Beispiel, dazu Escapen, ISO 8601, japanische Datumsangaben und das Umwandeln von einem Format in ein anderes.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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

ZeichenBedeutungBeispiel
dTag des Monats, 2 Ziffern mit führender Null (01 bis 31)14
jTag des Monats ohne führende Null (1 bis 31)14
DKurzer Tagesname, 3 BuchstabenSat
l (kleines L)Voller TagesnameSaturday
NISO-Wochentag, 1 (Montag) bis 7 (Sonntag)6
wWochentag, 0 (Sonntag) bis 6 (Samstag)6
SEnglisches Suffix für den Tag: st, nd, rd oder th. Verwende es nach jth
zTag des Jahres, ab 072

Woche und Monat

ZeichenBedeutungBeispiel
WISO-8601-Kalenderwoche (Wochen beginnen am Montag)11
FVoller MonatsnameMarch
MKurzer Monatsname, 3 BuchstabenMar
mMonatszahl mit führender Null (01 bis 12)03
nMonatszahl ohne führende Null (1 bis 12)3
tAnzahl der Tage im Monat31

Jahr

ZeichenBedeutungBeispiel
YVolles Jahr, mindestens 4 Ziffern2026
yJahr, 2 Ziffern26
L1 in einem Schaltjahr, sonst 00
oISO-8601-Jahr der Wochenzählung (zusammen mit W verwenden)2026
XErweitertes volles Jahr mit Vorzeichen (PHP 8.2+)+2026
xErweitertes volles Jahr, Vorzeichen nur bei Bedarf (PHP 8.2+)2026

Uhrzeit

ZeichenBedeutungBeispiel
HStunde, 24-Stunden-Format, führende Null (00 bis 23)09
GStunde, 24-Stunden-Format, ohne führende Null (0 bis 23)9
hStunde, 12-Stunden-Format, führende Null (01 bis 12)09
gStunde, 12-Stunden-Format, ohne führende Null (1 bis 12)9
iMinuten mit führender Null (00 bis 59)05
sSekunden mit führender Null (00 bis 59)07
aam oder pmam
AAM oder PMAM
vMillisekunden123
uMikrosekunden (in date() immer 000000, weil es ganze Sekunden nimmt)123456
BSwatch-Internetzeit (000 bis 999)420

Zeitzone

ZeichenBedeutungBeispiel
eBezeichner der ZeitzoneUTC
TAbkürzung der ZeitzoneUTC
PAbstand zu UTC mit Doppelpunkt+00:00
pWie P, aber Z für UTCZ
OAbstand zu UTC ohne Doppelpunkt+0000
ZAbstand in Sekunden0
I (großes i)1 während der Sommerzeit, sonst 00

Vollständiges Datum und Uhrzeit

ZeichenBedeutungBeispiel
cDatum und Uhrzeit nach ISO 86012026-03-14T09:05:07+00:00
rDatum nach RFC 2822, verwendet in E-Mail-HeadernSat, 14 Mar 2026 09:05:07 +0000
UUnix-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.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S