Start · Sprachen · PHP · Referenz · date_date_set

date_date_set

Funktion

Setzt das Datum (Jahr, Monat, Tag) eines <code>DateTime</code>-Objekts und gibt das geänderte Objekt zurück.

seit PHP 5.2.0 Kategorie: date

Signatur

date_date_set(DateTime $object, int $year, int $month, int $day): DateTime|false

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

Typ
DateTime|false
Beschreibung
Gibt das geänderte 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');
2024-12-24 10:30:00

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');
2024-01-01

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;
2022-08-15 2022-08-15

// 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.