W3docs

date()

Datum- und Zeitfunktionen sind in PHP unverzichtbar. In diesem Artikel erklären wir die wichtigsten Datums- und Zeitfunktionen in PHP.

Einführung

Fast jede Anwendung muss irgendwann ein Datum anzeigen, speichern oder vergleichen: eine „Veröffentlicht am"-Zeile, einen Countdown, eine Ablaufprüfung. Dieses Kapitel erklärt, wie die Datums- und Zeitwerkzeuge von PHP funktionieren und wann man welches einsetzen sollte. Wir beginnen mit den alltäglichen Funktionen — date(), time() und strtotime() — gehen dann zum Manipulieren und Vergleichen von Daten über und schließen mit den Teilen ab, die am häufigsten falsch gemacht werden: Zeitzonen und Sommerzeit.

Mit Daten in PHP arbeiten

PHP bietet zwei komplementäre Werkzeugsets für Daten:

  • Prozedurale Funktionendate(), time(), mktime() und strtotime() — die mit einem Unix-Timestamp (einer einfachen Ganzzahl: die Anzahl der Sekunden seit dem 1. Januar 1970 UTC) arbeiten. Diese eignen sich für schnelle Formatierungen und Berechnungen.
  • Die objektorientierte DateTime-API — die Klassen DateTime, DateInterval und DateTimeZone — die bei allem, was Intervalle, Vergleiche oder Zeitzonen betrifft, besser lesbar ist und der empfohlene Ansatz für neuen Code ist.

Dieses Kapitel verwendet beide Ansätze, damit Sie jeden Stil in echten Codebasen erkennen können.

Die Funktion date()

Die Funktion date() wandelt einen Timestamp in einen formatierten string um. Sie nimmt einen Formatstring als ersten Parameter und optional einen Timestamp als zweiten; wird der Timestamp weggelassen, verwendet date() die aktuelle Zeit.

php— editable, runs on the server

Dies gibt das aktuelle Datum im Format „Monat Tag, Jahr" aus, z. B. March 3, 2023.

Jeder Buchstabe im Formatstring ist ein Platzhalter. Die folgende Tabelle listet die am häufigsten verwendeten Zeichen auf:

ZeichenBedeutungBeispiel
Y4-stelliges Jahr2023
y2-stelliges Jahr23
mMonat, 2 Stellen (01–12)03
nMonat, ohne führende Null3
FVollständiger MonatsnameMarch
MAbgekürzter MonatsnameMar
dTag des Monats, 2 Stellen03
jTag des Monats, ohne führende Null3
lVollständiger WochentagFriday
HStunde, 24-Stunden-Format, 2 Stellen14
hStunde, 12-Stunden-Format, 2 Stellen02
iMinuten, 2 Stellen09
sSekunden, 2 Stellen05
AAM / PMPM

Jedes Zeichen, das kein erkannter Platzhalter ist, wird wörtlich ausgegeben, sodass date("Y-m-d H:i:s") einen Wert wie 2023-03-03 14:09:05 erzeugt. Um einen buchstäblichen Buchstaben auszugeben, der sonst als Platzhalter interpretiert würde, escapt man ihn mit einem Backslash: date('l \t\h\e jS'). Die vollständige Liste der Platzhalter finden Sie im Kapitel date-format().

Die Funktion time()

Die Funktion time() gibt den aktuellen Unix-Timestamp zurück — die Anzahl der Sekunden, die seit dem 1. Januar 1970 UTC vergangen sind. Sie nimmt keine Argumente entgegen und ist der übliche Ausgangspunkt für Datumsberechnungen, da Ganzzahlen leicht addiert und verglichen werden können.

php— editable, runs on the server

Dies gibt den aktuellen Unix-Timestamp aus, eine lange Ganzzahl wie 1646369616. Kombinieren Sie ihn mit date(), um „jetzt" zu formatieren: date("Y-m-d", time()). Weitere Details finden Sie im Kapitel time().

Die Funktion strtotime()

Die Funktion strtotime() analysiert ein englischsprachiges Textdatum — "March 3, 2023", "next Monday", "+2 weeks" — und gibt den entsprechenden Unix-Timestamp zurück. Sie ist bemerkenswert flexibel, was sie praktisch macht, um Benutzereingaben in einen Timestamp umzuwandeln, den man formatieren oder vergleichen kann.

php— editable, runs on the server

Dies gibt den Unix-Timestamp für den 3. März 2023 aus: 1677801600.

Achtung: Wenn strtotime() den string nicht verarbeiten kann, gibt sie false zurück und keinen Fehler. Prüfen Sie das Ergebnis immer, bevor Sie es verwenden — if (($ts = strtotime($input)) === false) { /* ungültiges Datum */ } — andernfalls wird false stillschweigend zu 0 umgewandelt, was als 1. Januar 1970 formatiert wird. Das Kapitel strtotime() beschreibt die vollständige Grammatik, die akzeptiert wird.

Daten in PHP manipulieren

Zusätzlich zur Formatierung von Daten bietet PHP eine Vielzahl von Funktionen zum Manipulieren von Daten. Diese Funktionen ermöglichen es Ihnen, Zeit zu einem Datum hinzuzufügen oder davon abzuziehen, Daten zu vergleichen und vieles mehr.

Zeit addieren und subtrahieren mit strtotime()

strtotime() kann mehr als feste Daten verarbeiten — sie versteht auch relative Ausdrücke. Übergeben Sie einen Basis-Timestamp als zweites Argument und einen Ausdruck wie "+1 day", "-3 weeks" oder "first day of next month" als ersten, und Sie erhalten einen neuen Timestamp zurück.

php— editable, runs on the server

Dies gibt das Datum einen Tag nach dem 3. März 2023 aus, nämlich „March 4, 2023".

Die Methoden DateTime::add() und DateTime::sub()

Die objektorientierten Methoden DateTime::add() und DateTime::sub() addieren oder subtrahieren ein DateInterval von einem DateTime-Objekt. Ein DateInterval wird aus einem ISO 8601-Dauerstring erstellt: P1D bedeutet „eine Periode von 1 Tag", P2W sind zwei Wochen und PT1H30M ist eine Stunde und dreißig Minuten (das T trennt den Datumsteil vom Zeitteil).

Dieser Stil wird für neuen Code bevorzugt, da die Operation wie ein Satz gelesen werden kann und das Objekt seine eigene Zeitzone verwaltet.

php— editable, runs on the server

Dies gibt das Datum einen Tag nach dem 3. März 2023 aus: March 4, 2023. Die dedizierten Kapitel date-add() und date-sub() gehen tiefer, und date-diff() zeigt, wie man das Intervall zwischen zwei DateTime-Objekten ermittelt.

Daten in PHP vergleichen

Da Timestamps einfache Ganzzahlen sind, können Sie zwei Daten mit den gewöhnlichen Operatoren <, > und == vergleichen, sobald beide Seiten als Timestamps vorliegen. Konvertieren Sie jeden Datumsstring zuerst mit strtotime().

php— editable, runs on the server

Dies gibt Date 1 is earlier than Date 2 aus. Beim Vergleich von DateTime-Objekten können Sie dieselben Operatoren direkt verwenden ($a < $b), ohne in Timestamps umzuwandeln.

Zeitzonen und Sommerzeit

Der schwierigste Teil bei der Arbeit mit Daten ist sicherzustellen, dass sie über Regionen hinweg auf den gleichen Moment verweisen. date() und time() interpretieren Timestamps in der konfigurierten Standard-Zeitzone von PHP, daher ist die korrekte Einstellung wichtig.

Die Funktion date_default_timezone_set()

date_default_timezone_set() legt die Standard-Zeitzone fest, die von allen Datums- und Zeitfunktionen für den Rest der Anfrage verwendet wird. Rufen Sie sie einmal zu Beginn Ihres Skripts auf und übergeben Sie einen gültigen IANA-Bezeichner wie America/New_York oder Europe/London.

<?php
    date_default_timezone_set("America/New_York");
    echo date("Y-m-d H:i:s");
?>

Eine Liste gültiger Bezeichner finden Sie im Kapitel php-timezones; das Lesen der aktuellen Einstellung wird in date-default-timezone-get() behandelt.

Die Klasse DateTimeZone

Wenn Sie in demselben Skript verschiedene Zeitzonen benötigen — zum Beispiel, um eine Veranstaltungszeit für Benutzer in verschiedenen Regionen anzuzeigen — reicht es nicht aus, einmalig die Standard-Zeitzone zu setzen. Die Klasse DateTimeZone ermöglicht es einem bestimmten DateTime-Objekt, seine eigene Zeitzone zu tragen:

<?php
    $timezone = new DateTimeZone("America/New_York");
    $date = new DateTime("2023-03-03 09:00", $timezone);
    echo $date->format("Y-m-d H:i T");
?>

Dies formatiert das Datum in New Yorker Zeit und gibt die Zonenabkürzung aus (T), zum Beispiel 2023-03-03 09:00 EST.

Mit Sommerzeit arbeiten

Die Sommerzeit (DST) stellt die Uhr vor oder zurück, sodass der Offset für eine Zone wie America/New_York nicht fest ist (EST vs. EDT). PHP behandelt den Wechsel automatisch, solange Sie einen benannten Zeitzonen-Bezeichner anstelle eines fest kodierten Offsets verwenden. Das Formatzeichen I (großes i) von date() gibt an, ob die Sommerzeit aktuell aktiv ist: 1 wenn ja, 0 wenn nein.

php— editable, runs on the server

Dies gibt aus, ob die Sommerzeit für die aktuelle Standard-Zeitzone gilt oder nicht.

Fazit

Sie haben jetzt das grundlegende Werkzeugset für Daten in PHP: date() zum Formatieren, time() und strtotime() zum Ermitteln und Verarbeiten von Timestamps, die DateTime-Familie zum Addieren, Subtrahieren und Vergleichen sowie DateTimeZone, um verschiedene Regionen im Griff zu behalten. Als Faustregel gilt: Verwenden Sie die prozeduralen Funktionen für schnelle einmalige Formatierungen und die objektorientierte DateTime-API für alles, was Intervalle, Vergleiche oder mehrere Zeitzonen umfasst. Eine umfassendere Einführung finden Sie unter PHP Date and Time.

Übungen

Übung
Welche Formate können von der Funktion date() in PHP verwendet werden?
Welche Formate können von der Funktion date() in PHP verwendet werden?
Was this page helpful?