W3docs

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
  • $format ist eine Zeichenkette aus Formatzeichen, die beschreiben, wie die Ausgabe aussehen soll.
  • $timestamp ist optional. Wird er weggelassen, verwendet date() die aktuelle Zeit.

Das aktuelle Datum im Format TT/MM/JJJJ:

php— editable, runs on the server

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:

CodeBedeutungBeispiel
dTag des Monats, 2-stellig0131
jTag des Monats, ohne führende Null131
DKurzname des WochentagsMonSun
lVollständiger Name des WochentagsMondaySunday
mMonat, 2-stellig0112
nMonat, ohne führende Null112
MKurzname des MonatsJanDec
FVollständiger Name des MonatsJanuaryDecember
YJahr, 4-stellig2025
yJahr, 2-stellig25
HStunde, 24-Stunden-Format, 2-stellig0023
hStunde, 12-Stunden-Format, 2-stellig0112
iMinuten, 2-stellig0059
sSekunden, 2-stellig0059
AAM / PMAM, PM
UUnix-Zeitstempel1750464000

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:

php— editable, runs on the server

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() und strtotime() mit vorzeichenbehafteten 32-Bit-Ganzzahlen und versagen ab 2038-01-19 03:14:07 UTC. DateTime ist davon nicht betroffen — verwenden Sie diese Klasse für Datumsangaben weit in der Zukunft oder Vergangenheit.
  • date() ist nicht Date(). PHP-Funktionsnamen sind nicht case-sensitiv, aber Formatzeichen schon: m (Monat) und M (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 Fehler false zurück, nicht 0 — und 0 ist 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.

Übungen

Übung
Welche der folgenden PHP-Funktionen kann verwendet werden, um das aktuelle Datum und die aktuelle Uhrzeit zu ermitteln?
Welche der folgenden PHP-Funktionen kann verwendet werden, um das aktuelle Datum und die aktuelle Uhrzeit zu ermitteln?
Was this page helpful?