Signatur
Beschreibung
date_date_set() ist die prozedurale Variante der objektorientierten Methode DateTime::setDate(). Sie ändert das Datum (Jahr, Monat und Tag) eines bestehenden DateTime-Objekts, ohne die Zeitkomponente zu verändern.
Die Funktion ist nützlich, wenn man mit dem prozeduralen Stil von PHP-Datumsfunktionen arbeitet und das Datum eines vorhandenen Objekts gezielt überschreiben möchte – etwa um nach der Erstellung noch eine Datumskorrektur vorzunehmen. Die übergebenen Werte können auch außerhalb des normalen Bereichs liegen (z. B. Monat 13), PHP normalisiert sie automatisch.
Zu beachten ist, dass diese Funktion das ursprüngliche Objekt direkt verändert (Mutation) und gleichzeitig einen Verweis darauf zurückgibt. Wer keine Seiteneffekte wünscht, sollte das Objekt vorher klonen oder besser die unveränderliche Klasse DateTimeImmutable mit setDate() verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTime | Das DateTime-Objekt, dessen Datum geändert werden soll. Wird typischerweise mit date_create() erstellt. |
|
| $year Pflicht | int | Das gewünschte Jahr als vierstellige Ganzzahl, z. B. 2024. |
|
| $month Pflicht | int | Der gewünschte Monat als Ganzzahl (1–12). Werte außerhalb des Bereichs werden von PHP normalisiert. | |
| $day Pflicht | int | Der gewünschte Tag als Ganzzahl (1–31). Werte außerhalb des Bereichs werden von PHP normalisiert. |
Rückgabewert
DateTime-Objekt zurück, oder false bei einem Fehler.Beispiele
Datum eines DateTime-Objekts ändern
<?php
$dt = date_create('2023-06-15 10:30:00');
date_date_set($dt, 2024, 12, 24);
echo date_format($dt, 'Y-m-d H:i:s');
Normalisierung von Werten außerhalb des gültigen Bereichs
<?php
// Monat 13 wird zu Januar des Folgejahres normalisiert
$dt = date_create('2023-01-01');
date_date_set($dt, 2023, 13, 1);
echo date_format($dt, 'Y-m-d');
Vergleich mit der OOP-Variante
<?php
// Prozedurale Variante
$dt1 = date_create('2020-05-20');
date_date_set($dt1, 2022, 8, 15);
echo date_format($dt1, 'Y-m-d') . PHP_EOL;
// OOP-Variante (äquivalent)
$dt2 = new DateTime('2020-05-20');
$dt2->setDate(2022, 8, 15);
echo $dt2->format('Y-m-d') . PHP_EOL;
// Wichtig · Fallstricke
Mutation: date_date_set() verändert das übergebene DateTime-Objekt direkt. Wer unbeabsichtigte Seiteneffekte vermeiden möchte, sollte entweder das Objekt mit clone kopieren oder stattdessen DateTimeImmutable zusammen mit DateTimeImmutable::setDate() verwenden.
Zeitzone: Die Zeitkomponente sowie die Zeitzone des Objekts bleiben beim Aufruf von date_date_set() unverändert.