PHP Datum und Uhrzeit
Datumsangaben in PHP verarbeiten: date() formatieren, Zeitzone setzen, Strings mit strtotime() parsen und Datums-Arithmetik mit DateTime.
Fast jede Webanwendung muss mit Datum und Uhrzeit umgehen: Zeitstempel auf Beiträgen, Ablaufdaten, „vor 3 Tagen"-Beschriftungen, Planung, Protokollierung. PHP bietet dafür zwei ergänzende Werkzeuge — die prozedurale date()-Funktionsfamilie für schnelles Formatieren sowie die objektorientierte DateTime-Klasse für sicherere und leistungsfähigere Datums-Arithmetik.
Dieses Kapitel zeigt Ihnen, wie Sie das aktuelle Datum anzeigen, die Zeitzone steuern, menschenlesbare Zeichenketten in Zeitstempel umwandeln und den Unterschied zwischen zwei Datumsangaben berechnen — einschließlich der häufigsten Fallstricke.
Wie PHP Zeit intern darstellt
Intern speichert PHP einen Zeitpunkt als Unix-Zeitstempel: die Anzahl der Sekunden, die seit Mitternacht UTC am 1. Januar 1970 vergangen sind. time() gibt den aktuellen Zeitstempel zurück, und die meisten Datumsfunktionen akzeptieren einen solchen als Eingabe:
<?php
echo time(); // e.g. 1750464000 (an integer)
echo date("Y-m-d"); // turns "now" into a readable string
?>Ein Zeitstempel ist zeitzonenunabhängig — er repräsentiert denselben Moment überall auf der Welt. Die Zeitzone ist nur wichtig, wenn Sie diesen Moment in eine menschenlesbare Zeichenkette formatieren, weshalb das korrekte Setzen der Zeitzone wichtig ist (siehe unten).
Grundlegende Verwendung von date()
Die Funktion date() wandelt einen Zeitstempel in eine formatierte Zeichenkette um:
date(string $format, ?int $timestamp = null): string$formatist eine Zeichenkette aus Formatzeichen, die beschreiben, wie die Ausgabe aussehen soll.$timestampist optional. Wird er weggelassen, verwendetdate()die aktuelle Zeit.
Das aktuelle Datum im Format TT/MM/JJJJ:
Jedes Zeichen, das kein Formatzeichen ist, wird wörtlich ausgegeben, sodass Sie Trennzeichen und Text einmischen können:
<?php
echo date("l, F j, Y"); // e.g. Saturday, June 21, 2025
echo "\n";
echo date("Y-m-d H:i:s"); // e.g. 2025-06-21 14:30:05
?>Formatzeichen
date() unterstützt Dutzende von Formatzeichen. Die am häufigsten verwendeten sind:
| Code | Bedeutung | Beispiel |
|---|---|---|
d | Tag des Monats, 2-stellig | 01 – 31 |
j | Tag des Monats, ohne führende Null | 1 – 31 |
D | Kurzname des Wochentags | Mon – Sun |
l | Vollständiger Name des Wochentags | Monday – Sunday |
m | Monat, 2-stellig | 01 – 12 |
n | Monat, ohne führende Null | 1 – 12 |
M | Kurzname des Monats | Jan – Dec |
F | Vollständiger Name des Monats | January – December |
Y | Jahr, 4-stellig | 2025 |
y | Jahr, 2-stellig | 25 |
H | Stunde, 24-Stunden-Format, 2-stellig | 00 – 23 |
h | Stunde, 12-Stunden-Format, 2-stellig | 01 – 12 |
i | Minuten, 2-stellig | 00 – 59 |
s | Sekunden, 2-stellig | 00 – 59 |
A | AM / PM | AM, PM |
U | Unix-Zeitstempel | 1750464000 |
Um einen Buchstaben auszugeben, der zufällig ein Formatzeichen ist (zum Beispiel ein wörtliches H), maskieren Sie ihn mit einem Backslash: date('\H:i').
Zeitzone setzen
date() formatiert Zeiten entsprechend der Standard-Zeitzone des Servers. Sich auf die Server-Standardeinstellung zu verlassen, ist eine häufige Ursache für „die Uhrzeit stimmt um ein paar Stunden nicht"-Fehler. Setzen Sie die Zeitzone explizit am Anfang Ihres Skripts (oder in php.ini):
<?php
date_default_timezone_set("America/New_York");
echo date("Y-m-d H:i:s"); // formatted for New York time
?>Verwenden Sie die IANA-Zeitzonennamen wie Europe/London, Asia/Tokyo oder UTC. Eine Übersicht, wie PHP Regionen und Sommerzeit handhabt, finden Sie im Kapitel PHP Timezones.
Zeichenketten in Zeitstempel parsen
Wenn ein Datum als Text ankommt — aus einem Formular, einer API oder einer Datenbank — wandelt strtotime() es in einen Zeitstempel um, den Sie formatieren oder für Berechnungen verwenden können. Die Funktion versteht sowohl absolute Datumsangaben als auch relative englische Ausdrücke:
strtotime() ist tolerant, aber mehrdeutig. Eine Zeichenkette wie 01/02/2022 wird als Monat/Tag (amerikanischer Stil) gelesen. Für vorhersehbares Parsen eines bekannten Formats bevorzugen Sie DateTime::createFromFormat() (siehe unten). Wenn strtotime() die Eingabe nicht versteht, gibt es false zurück — prüfen Sie daher immer das Ergebnis. Im dedizierten Kapitel strtotime() finden Sie die vollständige Liste der akzeptierten Ausdrücke.
Die DateTime-Klasse
Für alles, was über einfache Anzeige hinausgeht, ist die objektorientierte DateTime-API der moderne, empfohlene Ansatz. Sie vermeidet Integer-Overflow-Grenzen, behandelt Zeitzonen sauber und macht Datums-Arithmetik lesbar:
<?php
$date = new DateTime("2022-01-01 12:00:00");
// Format it
echo $date->format("l, F j, Y"); // Saturday, January 1, 2022
echo "\n";
// Add or subtract durations with DateInterval
$date->modify("+10 days");
echo $date->format("Y-m-d"); // 2022-01-11
?>DateTimeImmutable funktioniert auf die gleiche Weise, verändert jedoch niemals das ursprüngliche Objekt — modify() gibt stattdessen eine neue Instanz zurück. Bevorzugen Sie diese Klasse, wenn Sie Datumsangaben weitergeben, damit eine woanders aufgerufene Methode Ihren Wert nicht stillschweigend verändern kann.
Differenz zwischen zwei Datumsangaben berechnen
DateTime::diff() gibt ein DateInterval zurück, das die Differenz zwischen zwei Datumsangaben beschreibt — das ist wesentlich sicherer als das Subtrahieren von rohen Zeitstempeln:
<?php
$start = new DateTime("2022-01-01");
$end = new DateTime("2022-03-15");
$diff = $start->diff($end);
echo $diff->days . " days total\n"; // 73 days total
echo $diff->format("%m months, %d days"); // 2 months, 14 days
?>Das funktionale Äquivalent finden Sie im Kapitel date_diff().
Häufige Fallstricke
- Das Jahr-2038-Problem. Auf 32-Bit-Systemen arbeiten
date()undstrtotime()mit vorzeichenbehafteten 32-Bit-Ganzzahlen und versagen ab2038-01-19 03:14:07 UTC.DateTimeist davon nicht betroffen — verwenden Sie diese Klasse für Datumsangaben weit in der Zukunft oder Vergangenheit. date()ist nichtDate(). PHP-Funktionsnamen sind nicht case-sensitiv, aber Formatzeichen schon:m(Monat) undM(Monatsname) sind verschieden.- Fehlende Zeitzonenwarnung. Ohne konfigurierte Zeitzone geben ältere PHP-Versionen eine Warnung aus. Rufen Sie
date_default_timezone_set()frühzeitig auf. strtotime()gibt bei einem Fehlerfalsezurück, nicht0— und0ist ein gültiger Zeitstempel (die Unix-Epoche), also prüfen Sie mit=== false.
Fazit
PHP bietet Ihnen ein breites Spektrum an Werkzeugen für Datum und Uhrzeit. Greifen Sie auf date() und time() für schnelles Formatieren zurück, auf strtotime() zum Parsen eingehender Zeichenketten sowie auf die Klassen DateTime / DateTimeImmutable für zeitzonenbewusste Arithmetik und Datumsvergleiche. Setzen Sie Ihre Zeitzone explizit, validieren Sie geparste Eingaben und bevorzugen Sie DateTime, wann immer Sie Datumsangaben addieren, subtrahieren oder vergleichen müssen.
Erkunden Sie als Nächstes die einzelnen Bausteine im Detail: die PHP date()-Funktion, strtotime() und PHP Timezones.