Die Arbeit mit Datum und Uhrzeit gehört zu den häufigsten Aufgaben in der PHP-Entwicklung. Ob Blogbeiträge mit Veröffentlichungsdatum, Buchungssysteme oder Logdateien: Überall werden Datumswerte erzeugt, formatiert und verglichen. Die Funktion date_create() ist der prozedurale Weg, ein DateTime-Objekt in PHP zu erstellen. In diesem Tutorial lernst du die Syntax, die Parameter und die wichtigsten Anwendungsfälle dieser Funktion kennen.

Bevor es an die praktischen Beispiele geht, lohnt sich ein Blick auf die Grundlagen der Funktion und ihre Rolle im Zusammenspiel mit anderen DateTime-Methoden.
Was ist date_create()?
Die Funktion date_create() ist ein Alias für den Konstruktor der DateTime-Klasse. Sie erstellt ein neues DateTime-Objekt, das ein bestimmtes Datum und eine bestimmte Uhrzeit repräsentiert. Das zurückgegebene Objekt kann anschließend mit weiteren PHP-Datumsfunktionen wie date_format(), date_add() oder date_diff() weiterverarbeitet werden.
Im Gegensatz zu älteren Funktionen wie date() oder strtotime() liefert date_create() kein einfaches String- oder Integer-Ergebnis, sondern ein vollwertiges Objekt. Das macht den Code lesbarer und ermöglicht eine saubere Weiterverarbeitung.
Syntax und Parameter
Die vollständige Syntax von date_create() lautet:
<?php
date_create(string $datetime = "now", ?DateTimeZone $timezone = null): DateTime|false
Die Funktion gibt ein DateTime-Objekt zurück. Wenn der übergebene Datumsstring ungültig ist, gibt sie false zurück.
Der Parameter datetime
Der erste Parameter ist ein optionaler Datumsstring. Wird er weggelassen oder auf "now" gesetzt, verwendet PHP das aktuelle Datum mit der aktuellen Uhrzeit. Darüber hinaus werden zahlreiche Formate unterstützt, darunter ISO-8601-Formate wie "2026-12-24", relative Angaben wie "next Monday" oder "+3 days" sowie Unix-Timestamps mit vorangestelltem @-Zeichen.
Der Parameter timezone
Der zweite Parameter akzeptiert ein DateTimeZone-Objekt. Damit lässt sich die Zeitzone festlegen, in der das Datum interpretiert werden soll. Ohne Angabe verwendet PHP die in der php.ini konfigurierte Standard-Zeitzone.
Ein DateTime-Objekt erstellen
Der einfachste Aufruf von date_create() erzeugt ein Objekt mit dem aktuellen Datum und der aktuellen Uhrzeit.
<?php
$datum = date_create();
echo date_format($datum, 'Y-m-d H:i:s');
/* Gibt das aktuelle Datum und die Uhrzeit aus,
z.B. 2026-03-06 14:30:00 */
Du kannst auch einen konkreten Datumsstring übergeben, um ein bestimmtes Datum zu erzeugen.
<?php
$datum = date_create('2026-12-24');
echo date_format($datum, 'd.m.Y');
/* Ausgabe: 24.12.2026 */
$datum2 = date_create('next Monday');
echo date_format($datum2, 'Y-m-d');
/* Gibt den naechsten Montag aus */
PHP versteht dabei sowohl absolute als auch relative Datumsangaben. Relative Angaben wie "last day of this month" oder "+2 weeks" werden automatisch aufgelöst.
Datum formatieren mit date_format()
Nach dem Erstellen eines DateTime-Objekts wird es in der Regel formatiert ausgegeben. Dafür dient die Funktion date_format(). Sie akzeptiert als ersten Parameter das DateTime-Objekt und als zweiten einen Formatierungsstring.
Die wichtigsten Formatierungszeichen sind:
Y: vierstellige Jahreszahl (z.B. 2026) m: Monat mit führender Null (01 bis 12) d: Tag mit führender Null (01 bis 31) H: Stunde im 24-Stunden-Format (00 bis 23) i: Minuten mit führender Null (00 bis 59) s: Sekunden mit führender Null (00 bis 59) T: Zeitzonenkürzel (z.B. CET, UTC)
So lassen sich Datumswerte für die Ausgabe im Browser, für Datenbank-Einträge im MySQL-Format oder für Logdateien passend aufbereiten.
Verwandte Funktionen: date_create_from_format()
Wenn der Datumsstring nicht in einem Standardformat vorliegt, hilft date_create_from_format(). Diese Funktion erwartet zusätzlich einen Formatparameter, der beschreibt, wie der Datumsstring aufgebaut ist.
<?php
$datum = date_create_from_format('d/m/Y', '24/12/2026');
echo date_format($datum, 'Y-m-d');
/* Ausgabe: 2026-12-24 */
Das ist besonders nützlich, wenn Datumsangaben aus Formularen oder externen Quellen in nicht standardisierten Formaten vorliegen.
Unterschied zwischen date_create() und new DateTime()
In PHP gibt es zwei Wege, ein DateTime-Objekt zu erzeugen: den prozeduralen Weg mit date_create() und den objektorientierten Weg mit new DateTime().
<?php
/* Prozedural */
$datum1 = date_create('2026-01-15');
/* Objektorientiert */
$datum2 = new DateTime('2026-01-15');
/* Beide liefern ein identisches DateTime-Objekt */
Funktional sind beide Varianten gleichwertig. Der entscheidende Unterschied liegt im Fehlerverhalten: date_create() gibt bei einem ungültigen Datumsstring false zurück, während new DateTime() eine Exception wirft. In modernem, objektorientiertem Code wird meist new DateTime() bevorzugt, weil Exceptions eine sauberere Fehlerbehandlung ermöglichen.
Arbeiten mit Zeitzonen
Zeitzonen spielen eine wichtige Rolle, wenn eine Anwendung Nutzer in verschiedenen Ländern bedient. Mit dem zweiten Parameter von date_create() lässt sich eine Zeitzone explizit festlegen.
<?php
$tz = new DateTimeZone('Europe/Berlin');
$datum = date_create('now', $tz);
echo date_format($datum, 'Y-m-d H:i:s T');
/* Ausgabe z.B.: 2026-03-06 14:30:00 CET */
Ohne explizite Angabe verwendet PHP die Zeitzone aus der php.ini-Konfiguration (Direktive date.timezone). Für konsistente Ergebnisse empfiehlt es sich, die Zeitzone immer bewusst zu setzen, entweder im Code oder in der Serverkonfiguration.
Unix-Timestamps und date_create()
Ein Unix-Timestamp ist eine Ganzzahl, die die Anzahl der Sekunden seit dem 1. Januar 1970 (UTC) repräsentiert. Um aus einem Timestamp ein DateTime-Objekt zu erzeugen, wird dem Wert ein @-Zeichen vorangestellt.
<?php
$datum = date_create('@1609459200');
echo date_format($datum, 'Y-m-d H:i:s');
/* Ausgabe: 2021-01-01 00:00:00 */
Wichtig: Bei Timestamps mit @ wird die Zeitzone automatisch auf UTC gesetzt. Eine eventuell übergebene DateTimeZone wird dabei ignoriert.
Typische Fehler und Stolperfallen
Beim Arbeiten mit date_create() gibt es einige häufige Fehlerquellen:
- Ungültiger Datumsstring:
date_create() gibt bei einem nicht erkennbaren Format false zurück. Eine Prüfung des Rückgabewerts ist daher ratsam. - Zeitzonen-Verwirrung: Ohne explizite Zeitzone wird die Standardeinstellung aus
php.ini verwendet. Das kann auf verschiedenen Servern zu unterschiedlichen Ergebnissen führen. - Verwechslung mit date_create_from_format(): Für nicht standardmäßige Formate wie
"24/12/2026" muss date_create_from_format() verwendet werden, da date_create() dieses Format nicht korrekt parst. - Timestamps ohne @: Der Wert
1609459200 ohne vorangestelltes @ wird nicht als Timestamp erkannt.
graph TD
A[date_create] --> B{String gueltig?}
B -->|Ja| C[DateTime-Objekt]
B -->|Nein| D[false]
C --> E[date_format]
C --> F[date_add]
C --> G[date_modify]
C --> H[date_diff]
Fazit
Die Funktion date_create() ist ein einfacher und zuverlässiger Weg, DateTime-Objekte in PHP zu erzeugen. Sie akzeptiert flexible Datumsformate, unterstützt Zeitzonen und lässt sich nahtlos mit Funktionen wie date_format(), date_add() und date_diff() kombinieren. Für modernen PHP-Code bietet sich alternativ die objektorientierte Schreibweise mit new DateTime() an. Unabhängig vom gewählten Stil bildet das DateTime-Objekt die Grundlage für jede professionelle Datumsverarbeitung in PHP.