Die Zeit wartet nicht: Warum Datumsangaben in PHP kompliziert sind (und wie man das behebt)
\n\nStellen Sie sich vor: Sie programmieren einen Blog, einen Online-Shop oder ein Benutzerkonto. Und plötzlich merken Sie – Sie müssen dem Benutzer zeigen, wann ein Artikel veröffentlicht, eine Bestellung aufgegeben oder eine Nachricht gesendet wurde. Das könnte doch einfacher nicht sein, oder? Man nimmt die Funktion date() – und fertig.
Aber der Teufel steckt, wie immer, im Detail. Im Jahr 2025 machen PHP-Entwickler immer noch dieselben Fehler: Sie verwechseln Zeitzonen, vergessen die Unveränderlichkeit von Objekten, verwenden veraltete Funktionen. Und dann wundern sie sich, warum die Zeit auf der Website „springt“ und Tests fehlschlagen.
\n\nIn diesem Artikel besprechen wir die Best Practices für die Arbeit mit Datum und Uhrzeit in PHP – von einfachen Lösungen bis hin zu professionellen Techniken. Sie erfahren, wie Sie das aktuelle Datum abrufen, mit Zeitzonen arbeiten und sich bei der Arbeit mit Zeitstempeln nicht ins eigene Bein schießen.
\n\n1. Der einfachste Weg: Die Funktion date()
\n\nBeginnen wir mit dem Klassiker. Die Funktion date() ist das, womit 90% der Anfänger starten. Sie akzeptiert zwei Parameter: das Ausgabeformat und (optional) einen Timestamp. Wenn kein Timestamp angegeben wird, wird die aktuelle Serverzeit verwendet.
echo date('Y-m-d H:i:s');\n// Ausgabe: 2025-04-08 14:35:12\n\nHier sind die gängigsten Formate:
\n- \n
Y– Jahr (4 Ziffern) \n m– Monat (01–12) \n d– Tag des Monats (01–31) \n H– Stunden im 24-Stunden-Format \n i– Minuten \n s– Sekunden \n
Problem: date() hängt von der Einstellung date.timezone in der php.ini ab. Wenn Sie keine Zeitzone festgelegt haben, verwendet PHP die Systemzeit des Servers. Und der Server kann sich in einer anderen Zeitzone befinden – dann sehen Ihre Benutzer die falsche Uhrzeit.
2. Der professionelle Ansatz: Die Klasse DateTime
\n\nSeit PHP 5.2 haben wir die Klasse DateTime. Dies ist eine objektorientierte Methode zur Arbeit mit Datumsangaben, die viel flexibler und sicherer ist als die Funktionen date() und time().
$now = new DateTime();\necho $now->format('Y-m-d H:i:s');\n// Ausgabe: 2025-04-08 14:35:12\n\nVorteile von DateTime:
\n- \n
- Sie können die Zeitzone einfach über den Konstruktor festlegen \n
- Unterstützt die Änderung des Datums (Tage, Monate hinzufügen) \n
- Kann Datumsangaben miteinander vergleichen \n
- Arbeitet mit Intervallen \n
Beispiel mit Zeitzone:
\n\n$now = new DateTime('now', new DateTimeZone('Europe/Moscow'));\necho $now->format('Y-m-d H:i:s');\n// Ausgabe: 2025-04-08 17:35:12 (MSK, UTC+3)\n\n2.1. DateTimeImmutable – Ihr neuer bester Freund
\n\nIn PHP 5.5 wurde DateTimeImmutable eingeführt. Der Hauptunterschied zum normalen DateTime: Es ändert sich nicht selbst. Stattdessen gibt jede Methode (z. B. modify() oder add()) ein neues Objekt zurück.
$date = new DateTimeImmutable();\n$modified = $date->modify('+1 day');\n\necho $date->format('Y-m-d'); // 2025-04-08 (unverändert!)\necho $modified->format('Y-m-d'); // 2025-04-09 (neues Objekt)\n\nWarum ist das wichtig? Weil normales DateTime ein Referenzobjekt ist. Wenn Sie es an eine Funktion übergeben und dort ändern, ändert sich auch das Original. Bei Immutable gibt es dieses Problem nicht. Im Jahr 2025 gilt dies als De-facto-Standard für ernsthafte Projekte.
\n\n3. So erhalten Sie einen Timestamp: time() vs. DateTime
\n\nManchmal benötigen Sie kein Datum, sondern einen Unix-Timestamp – die Anzahl der Sekunden seit dem 1. Januar 1970. PHP bietet zwei Wege:
\n\n// Alter Weg\necho time(); // 1744112112\n\n// Neuer Weg\necho (new DateTime())->getTimestamp(); // 1744112112\n\nFür einfache Aufgaben ist time() völlig ausr