Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
 
 
 

PHP DateTime: Datum und Uhrzeit objektorientiert verarbeiten

Sie befinden sich: Home > Php Tutorial > PHP DateTime: Datum und...

PHP DateTime: Datum und Uhrzeit objektorientiert verarbeiten


Eintrag am:  28.03.2026
Hits / Besucher:  34
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Die prozedurale Arbeit mit date(), strtotime() und mktime() funktioniert, stößt aber bei komplexeren Anforderungen schnell an ihre Grenzen. Seit PHP 5.2 bietet die DateTime-Klasse einen objektorientierten Ansatz, der Datumswerte in einem eigenständigen Objekt kapselt. Methoden wie format(), modify() und diff() machen den Code lesbarer, Zeitzonen lassen sich sauber verwalten, und mit DateTimeImmutable steht eine Variante ohne Seiteneffekte zur Verfügung. Dieses Tutorial zeigt, wie du DateTime-Objekte erzeugst, formatierst, manipulierst und vergleichst.

Illustration zum Tutorial: PHP DateTime: Datum und Uhrzeit objektorientiert verarbeiten

Alles beginnt mit dem Erzeugen eines DateTime-Objekts, das als Ausgangspunkt für alle weiteren Operationen dient.

Ein DateTime-Objekt erzeugen

Bevor ein Datum formatiert oder berechnet werden kann, muss ein DateTime-Objekt erzeugt werden. PHP bietet dafür zwei Wege: den Konstruktor mit new DateTime() und die statische Methode DateTime::createFromFormat().

new DateTime und der Konstruktor

Der Konstruktor akzeptiert einen optionalen Datumsstring. Wird kein Argument übergeben, verwendet PHP automatisch das aktuelle Datum mit der aktuellen Uhrzeit. Neben ISO-8601-Formaten versteht der Konstruktor auch relative Angaben wie "next Friday" oder "+3 days" sowie Unix-Timestamps mit vorangestelltem @-Zeichen.

<?php

$jetzt = new DateTime();
$bestimmtesDatum = new DateTime('2025-06-15');
$ausDeutschem = DateTime::createFromFormat('d.m.Y', '15.06.2025');

Wichtig: Wenn der übergebene String kein gültiges Datum enthält, wirft der Konstruktor eine Exception. Das ermöglicht eine saubere Fehlerbehandlung mit try/catch, anders als die prozedurale Funktion date_create(), die bei ungültigen Eingaben lediglich false zurückgibt.

DateTime::createFromFormat

Nicht immer liegen Datumsangaben in einem Standardformat vor. Wenn Nutzereingaben aus Formularen, CSV-Dateien oder externen APIs in Formaten wie "15.06.2025" oder "06/15/2025" ankommen, kann der Konstruktor diese nicht zuverlässig interpretieren. Die statische Methode createFromFormat() löst dieses Problem, indem sie das erwartete Format als ersten Parameter entgegennimmt.

Die Methode gibt bei Erfolg ein DateTime-Objekt zurück. Stimmt der String nicht mit dem angegebenen Format überein, ist das Ergebnis false. Eine Prüfung des Rückgabewerts ist daher immer ratsam.

Datum und Uhrzeit formatieren

Nach dem Erzeugen eines DateTime-Objekts ist die formatierte Ausgabe der häufigste Anwendungsfall. PHP stellt dafür die Methode format() bereit, die einen Formatierungsstring entgegennimmt und das Datum als lesbaren Text zurückgibt.

Die format-Methode und Formatzeichen

Die format()-Methode arbeitet mit denselben Formatzeichen wie die prozedurale Funktion date(). Die wichtigsten Zeichen sind:

  • Y steht für die vierstellige Jahreszahl (z.B. 2025)
  • m steht für den Monat mit führender Null (01 bis 12)
  • d steht für den Tag mit führender Null (01 bis 31)
  • H steht für die Stunde im 24-Stunden-Format (00 bis 23)
  • i steht für Minuten mit führender Null (00 bis 59)
  • s steht für Sekunden mit führender Null (00 bis 59)
  • W steht für die ISO-8601-Kalenderwoche (01 bis 53)
<?php

$datum = new DateTime('2025-06-15 14:30:00');

echo $datum->format('d.m.Y'); /* 15.06.2025 */
echo $datum->format('H:i'); /* 14:30 */
echo $datum->format('l, d. F Y'); /* Sunday, 15. June 2025 */
echo $datum->format('W'); /* Kalenderwoche */

Die Kombination aus Formatzeichen und festen Trennzeichen wie Punkten, Leerzeichen oder Kommata erlaubt nahezu jede gewünschte Darstellung. Für die Speicherung in Datenbanken empfiehlt sich das ISO-Format 'Y-m-d H:i:s', für die Anzeige im deutschsprachigen Raum das Format 'd.m.Y'.

DateTime manipulieren

Datumswerte müssen häufig verändert werden, etwa um eine Lieferfrist zu berechnen, ein Ablaufdatum zu setzen oder einen Zeitraum zu verschieben. Die DateTime-Klasse bietet dafür mehrere Methoden.

modify und add/sub

Die Methode modify() akzeptiert relative Datumsangaben als String. Diese Angaben folgen derselben Syntax, die auch strtotime() versteht.

<?php

$datum = new DateTime('2025-06-15');

$datum->modify('+7 days');
echo $datum->format('d.m.Y'); /* 22.06.2025 */

$datum->modify('-1 month');
echo $datum->format('d.m.Y'); /* 22.05.2025 */

Ein wichtiger Stolperstein: DateTime ist mutable. Der Aufruf von modify() verändert das bestehende Objekt, anstatt ein neues zu erzeugen. Wer den ursprünglichen Wert behalten möchte, muss vorher eine Kopie mit clone erstellen oder auf DateTimeImmutable umsteigen.

Vorsicht ist auch bei Monatsberechnungen geboten. Der Ausdruck "+1 month" auf den 31. Januar angewendet ergibt nicht den 28. Februar, sondern den 3. März. PHP zählt 31 Tage weiter, was zu unerwarteten Ergebnissen führen kann.

DateInterval nutzen

Alternativ zu modify() bieten die Methoden add() und sub() eine typsichere Möglichkeit, Zeitintervalle zu verarbeiten. Beide erwarten ein DateInterval-Objekt, das im ISO-8601-Intervallformat angegeben wird. Dabei steht P für den Beginn der Periodendefinition, gefolgt von Zahlenwerten mit Einheiten wie Y (Jahre), M (Monate), D (Tage), und nach dem Buchstaben T die Zeitangaben H (Stunden), M (Minuten) und S (Sekunden). So steht beispielsweise P1Y2M3D für ein Intervall von einem Jahr, zwei Monaten und drei Tagen. Der Vorteil gegenüber modify() liegt in der klaren Trennung von Wert und Richtung: add() addiert, sub() subtrahiert.

graph TD
    A[Eingabe] --> B[DateTime]
    B --> C[format]
    B --> D[modify / add]
    B --> E[diff]
    E --> F[DateInterval]

DateTime vs. DateTimeImmutable

Die Klasse DateTime ist mutable: Jede Manipulation verändert das Objekt direkt. Das kann zu schwer auffindbaren Fehlern führen, besonders wenn ein DateTime-Objekt an mehrere Funktionen übergeben oder in einer Schleife verändert wird. DateTimeImmutable löst dieses Problem, indem jede Änderung ein neues Objekt zurückgibt und das Original unangetastet bleibt.

<?php

$original = new DateTimeImmutable('2025-06-15');
$geaendert = $original->modify('+1 day');

echo $original->format('d.m.Y'); /* 15.06.2025 - unveraendert */
echo $geaendert->format('d.m.Y'); /* 16.06.2025 - neues Objekt */

Beide Klassen implementieren das DateTimeInterface. Das bedeutet, dass Funktionen und Methoden, die dieses Interface als Typ erwarten, sowohl DateTime als auch DateTimeImmutable akzeptieren. In modernem PHP-Code wird DateTimeImmutable bevorzugt, weil es Seiteneffekte zuverlässig verhindert und den Code vorhersagbarer macht.

Zeitzonen in DateTime

Zeitzonen sind unverzichtbar, sobald eine Anwendung Nutzer in verschiedenen Ländern bedient oder mit externen APIs kommuniziert. Die DateTime-Klasse arbeitet mit DateTimeZone-Objekten, die entweder im Konstruktor oder nachträglich über setTimezone() gesetzt werden können.

<?php

$berlin = new DateTimeZone('Europe/Berlin');
$datum = new DateTime('now', $berlin);
echo $datum->format('Y-m-d H:i:s T');
/* Ausgabe z.B.: 2025-06-15 14:30:00 CEST */

$datum->setTimezone(new DateTimeZone('America/New_York'));
echo $datum->format('Y-m-d H:i:s T');
/* Ausgabe z.B.: 2025-06-15 08:30:00 EDT */

Ohne explizite Angabe verwendet PHP die in der php.ini konfigurierte Standard-Zeitzone (Direktive date.timezone). Für konsistente Ergebnisse empfiehlt es sich, intern mit UTC zu arbeiten und die Zeitzone erst bei der Ausgabe für den Nutzer umzurechnen. So werden Probleme mit Sommer- und Winterzeit vermieden, und Datumswerte lassen sich zuverlässig in Datenbanken speichern.

Bei Unix-Timestamps mit @-Präfix wird die Zeitzone automatisch auf UTC gesetzt. Eine eventuell übergebene DateTimeZone wird in diesem Fall ignoriert.

DateTime-Objekte vergleichen

DateTime-Objekte können in PHP direkt mit den Vergleichsoperatoren <, >, == und != verglichen werden. Das macht Zeitvergleiche in Bedingungen besonders lesbar.

<?php

$start = new DateTime('2025-01-01');
$ende = new DateTime('2025-12-31');

if ($start < $ende) {
echo 'Start liegt vor Ende';
}

$differenz = $start->diff($ende);
echo $differenz->days . ' Tage Unterschied';

Die Methode diff() berechnet die Differenz zwischen zwei DateTime-Objekten und gibt ein DateInterval-Objekt zurück. Über dessen Eigenschaft days lässt sich die absolute Anzahl der Tage zwischen den beiden Zeitpunkten ermitteln. Weitere Eigenschaften wie y, m und d liefern die aufgegliederte Differenz in Jahren, Monaten und Tagen.

Fazit: Wann DateTime statt date() nutzen?

Die prozedurale Funktion date() genügt für einfache Formatierungen. Sobald Datumswerte jedoch berechnet, verglichen oder zwischen Zeitzonen umgerechnet werden müssen, bietet die DateTime-Klasse klare Vorteile. Der objektorientierte Ansatz kapselt Datum, Uhrzeit und Zeitzone in einem Objekt, das sich sauber weiterreichen und manipulieren lässt. Für neuen Code empfiehlt sich DateTimeImmutable als Standard, weil es unbeabsichtigte Änderungen am Originalobjekt zuverlässig ausschließt. Zusammen mit DateInterval und DateTimeZone bildet die DateTime-Familie ein vollständiges Werkzeugset für jede Anforderung rund um Datum und Uhrzeit in PHP.

 


Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.