W3docs

time()

PHP Datum- und Zeitfunktionen erklärt: time(), date(), strtotime(), DateTimeImmutable, DateInterval und DateTimeZone mit Beispielen.

Einführung

PHP bietet eine umfangreiche Sammlung von Datums- und Zeitfunktionen, die für die Verarbeitung zeitbezogener Daten unverzichtbar sind: Protokollierung von Ereignissen, Zeitplanung, Berechnung von Zeitspannen und Anzeige lokalisierter Datumsangaben. Dieser Leitfaden behandelt die am häufigsten verwendeten Werkzeuge — time(), date(), strtotime() und die moderne objektorientierte API mit DateTimeImmutable / DateInterval / DateTimeZone — mit ihrer Syntax und praktischen, ausführbaren Beispielen.

Einige Konzepte, die man vorab kennen sollte:

  • Ein Unix-Timestamp ist eine ganze Zahl, die die Sekunden seit dem 1. Januar 1970 00:00:00 UTC (der „Epoche") zählt. Er ist zeitzonenunabhängig, was ihn ideal zum Speichern und Vergleichen von Zeitpunkten macht.
  • Ein Formatierungsstring wandelt einen Timestamp in eine für Menschen lesbare Zeichenkette um. Jedes Zeichen (Y, m, d, H, …) entspricht einer Datumskomponente.
  • PHP rendert Datumsangaben anhand der Standard-Zeitzone des Servers. Setze sie explizit, um Überraschungen zu vermeiden:
<?php

date_default_timezone_set('UTC');

Das Setzen der Zeitzone im Voraus macht date() und time() auf allen Servern deterministisch. Eine ausführlichere Einführung findest du unter PHP Date and Time.

PHP date-Funktion

Die Funktion date() formatiert einen Timestamp in eine lesbare Zeichenkette. Sie akzeptiert zwei Parameter: format (erforderlich) und timestamp (optional, standardmäßig die aktuelle Zeit). Der Formatierungsstring verwendet bestimmte Zeichen, um Datumskomponenten darzustellen.

Beispiel der date()-Funktion in PHP

php— editable, runs on the server

In diesem Beispiel stehen Y, m und d jeweils für das vierstellige Jahr, den zweistelligen Monat und den zweistelligen Tag. Der Formatierungsstring unterstützt viele weitere Zeichen für Stunden, Minuten, Sekunden und mehr.

Häufige Formatierungszeichen

ZeichenBedeutungBeispiel
Y4-stelliges Jahr2023
y2-stelliges Jahr23
mMonat, nullaufgefüllt03
nMonat, ohne Auffüllung3
dTag des Monats, nullaufgefüllt03
jTag des Monats, ohne Auffüllung3
HStunde, 24h, nullaufgefüllt14
gStunde, 12h, ohne Auffüllung2
iMinuten09
sSekunden05
AAM/PMPM
lTagesname (vollständig)Friday
DTagesname (kurz)Fri
FMonatsname (vollständig)March
TZeitzonenabkürzungUTC

Übergib ein zweites Argument, um einen beliebigen Timestamp zu formatieren, nicht nur den aktuellen Zeitpunkt:

<?php

date_default_timezone_set('UTC');

echo date("l, F j, Y", 1678838400); // outputs "Wednesday, March 15, 2023"

Um einen Buchstaben wörtlich zu nehmen und nicht als Formatierungszeichen zu interpretieren, stelle ihm einen Backslash voran (z. B. date('jS \o\f F')). Weitere Formatierungsoptionen findest du unter date() und date_format().

PHP time-Funktion

Die Funktion time() gibt den aktuellen Unix-Timestamp zurück, der die Anzahl der Sekunden seit dem 1. Januar 1970, 00:00:00 UTC zählt.

Wie verwendet man die PHP-Funktion time()?

php— editable, runs on the server

Die zurückgegebene ganze Zahl kann direkt an date() oder andere Zeitfunktionen übergeben werden. Da der Timestamp nur eine Zahl ist, lassen sich arithmetische Operationen darauf ausführen — zum Beispiel 86400 (die Anzahl der Sekunden eines Tages) addieren, um „morgen zur selben Zeit" zu erhalten:

<?php

date_default_timezone_set('UTC');

$tomorrow = time() + 86400; // 24 * 60 * 60 seconds
echo date("Y-m-d H:i:s", $tomorrow);

Für Datums-Arithmetik, die Monate, Schaltjahre und Sommerzeit berücksichtigt, ist die unten beschriebene objektorientierte API der rohen Sekunden-Arithmetik vorzuziehen.

PHP strtotime-Funktion

Die Funktion strtotime() parst eine englische textuelle Datums- und Zeitbeschreibung in einen Unix-Timestamp. Sie akzeptiert ein einzelnes String-Argument.

Beispiel der PHP-Funktion strtotime

php— editable, runs on the server

Dies konvertiert die angegebene Datums- und Uhrzeitzeichenkette in den entsprechenden Unix-Timestamp-Wert. strtotime() versteht auch relative Ausdrücke, was für die Zeitplanung praktisch ist:

<?php

date_default_timezone_set('UTC');

echo date("Y-m-d", strtotime("next monday")), "\n";
echo date("Y-m-d", strtotime("2023-03-03 +1 week")); // outputs "2023-03-10"

Wenn der String nicht geparst werden kann, gibt strtotime() false zurück. Überprüfe daher immer das Ergebnis, bevor du es weiterverwendest.

PHP DateInterval-Klasse

Die Klasse DateInterval repräsentiert eine Zeitspanne zwischen zwei Datums- oder Zeitangaben. Modernes PHP verwendet typischerweise DateTimeImmutable zur Berechnung von Intervallen, da dadurch das ursprüngliche Datumsobjekt nicht verändert wird.

Beispiel der PHP-Klasse DateInterval

php— editable, runs on the server

Dies berechnet die Differenz zwischen zwei Datumsangaben. Der Formatierungsbezeichner %R%a gibt das Vorzeichen (+ oder -) gefolgt von der Gesamtanzahl der Tage aus.

Du kannst auch ein DateInterval-Objekt direkt aus einem ISO 8601-Dauerstring erstellen und ihn zu einem Datum addieren oder subtrahieren. P1W bedeutet „ein Zeitraum von einer Woche":

<?php

$start = new DateTimeImmutable('2023-03-03');
$later = $start->add(new DateInterval('P1W'));
echo $later->format('Y-m-d'); // outputs "2023-03-10"

Da DateTimeImmutable das Original nie verändert, zeigt $start nach dem Aufruf von add() weiterhin auf den 3. März. Prozedurale Entsprechungen findest du unter date_add(), date_sub() und date_diff().

PHP-Zeitzonenfunktionen

PHP verwaltet Zeitzonen über die Klasse DateTimeZone und zugehörige Methoden. Diese ermöglichen die Konvertierung zwischen Zeitzonen und die Anzeige von UTC-Offsets.

Beispiel für PHP-Zeitzonenfunktionen

php— editable, runs on the server

Dies gibt das Datum und die Uhrzeit in der angegebenen Zeitzone zusammen mit der Abkürzung (z. B. EST) aus.

Um einen bestehenden Zeitpunkt von einer Zeitzone in eine andere zu konvertieren, verwende setTimezone(). Der Zeitpunkt selbst bleibt gleich — nur seine Darstellung ändert sich:

<?php

$ny = new DateTimeImmutable('2023-03-03 12:00:00', new DateTimeZone('America/New_York'));
$utc = $ny->setTimezone(new DateTimeZone('UTC'));
echo $utc->format('Y-m-d H:i:s T'); // outputs "2023-03-03 17:00:00 UTC"

New York liegt im März fünf Stunden hinter UTC, daher entspricht Mittag in New York 17:00 UTC. Um die von den prozeduralen Funktionen date() und time() verwendete Zeitzone zu ändern, rufe date_default_timezone_set() auf.

Prozedural vs. objektorientierte API: Was soll man verwenden?

PHP bietet zwei Stile für die Arbeit mit Datumsangaben:

  • Prozedurale Funktionen (time(), date(), strtotime(), getdate(), gmdate()) sind prägnant und eignen sich gut für schnelle Formatierungen oder einmalige Konvertierungen.
  • Die objektorientierte API (DateTimeImmutable, DateInterval, DateTimeZone) ist die empfohlene Wahl für alles, was Zeitzonen, Zeitspannen oder Datums-Arithmetik beinhaltet, da sie explizit, unveränderlich ist und die Fallstricke der ganzzahligen Sekunden-Arithmetik über Sommerzeitgrenzen hinweg vermeidet.

Eine gute Faustregel: Greife auf DateTimeImmutable zurück, wenn ein Datum eine Zeitzone überschreitet oder addiert oder subtrahiert werden muss.

Fazit

Die Beherrschung der PHP-Datums- und Zeitfunktionen ermöglicht es Entwicklern, zeitbezogene Daten in verschiedenen Umgebungen und Zeitzonen präzise zu verarbeiten. Beginne mit time() und date() für einfache Fälle, nutze strtotime() zum Parsen von Benutzereingaben und verwende die DateTimeImmutable-Familie für zuverlässige Datums-Arithmetik.

Übungen

Übung
Was sind die Funktionalitäten der Funktion 'date()' in PHP?
Was sind die Funktionalitäten der Funktion 'date()' in PHP?
Was this page helpful?