Start · Sprachen · PHP · Referenz · date_time_set

date_time_set

Funktion

Setzt die Uhrzeit eines <code>DateTime</code>-Objekts auf die angegebenen Stunden, Minuten, Sekunden und Mikrosekunden.

seit PHP 5.2.0 Kategorie: date

Signatur

date_time_set(DateTime $object, int $hour, int $minute, int $second = 0, int $microsecond = 0): DateTime

Beschreibung

date_time_set() ist die prozedurale Variante der Methode DateTime::setTime() und ermöglicht es, die Uhrzeit eines bestehenden DateTime-Objekts zu überschreiben, ohne das Datum zu verändern. Die Funktion gibt das modifizierte Objekt zurück, was Methoden-Verkettung in prozeduralem Stil unterstützt.

Typische Einsatzbereiche sind das Normalisieren von Datumswerten auf einen bestimmten Tageszeitpunkt (z. B. Mitternacht), das Zusammensetzen von Datum und Uhrzeit aus unterschiedlichen Quellen sowie die Vorbereitung von Zeitstempeln für Datenbankabfragen oder Berechnungen.

Werte außerhalb der normalen Grenzen werden automatisch übertragen: Ein $hour-Wert von 25 erhöht beispielsweise das Datum um einen Tag. Dieses Überlauf-Verhalten ist nützlich für arithmetische Zeitoperationen, kann aber bei unerwarteten Eingaben zu Überraschungen führen.

Für unveränderliche Datumsobjekte steht die Klasse DateTimeImmutable zur Verfügung, deren prozedurale Entsprechung date_time_set() hingegen nicht direkt unterstützt – dort sollte DateTimeImmutable::setTime() verwendet werden.

Parameter

Name Typ Default Beschreibung
$object Pflicht DateTime Ein DateTime-Objekt, dessen Uhrzeit geändert werden soll. Das Objekt wird direkt modifiziert.
$hour Pflicht int Die Stunden (0–23). Werte außerhalb dieses Bereichs werden auf den nächsten Tag oder vorherigen Tag übertragen.
$minute Pflicht int Die Minuten (0–59). Überlaufwerte werden entsprechend auf die Stunden übertragen.
$second int 0 Die Sekunden (0–59). Standardmäßig 0, wenn nicht angegeben.
$microsecond int 0 Die Mikrosekunden (0–999999). Seit PHP 7.1.0 unterstützt. Standardmäßig 0.

Rückgabewert

Typ
DateTime
Beschreibung
Gibt das modifizierte DateTime-Objekt zurück. Da das Objekt direkt verändert wird, ist der Rückgabewert identisch mit dem übergebenen Objekt und kann für Verkettung genutzt werden.

Beispiele

Uhrzeit eines Datumsobjekts auf Mitternacht setzen

<?php
$date = date_create('2024-06-15 14:30:00');
date_time_set($date, 0, 0, 0);
echo date_format($date, 'Y-m-d H:i:s');
// Gibt das gleiche Datum, aber mit Uhrzeit 00:00:00 aus
2024-06-15 00:00:00

Datum und Uhrzeit aus separaten Quellen zusammenführen

<?php
// Datum aus einem Formular, Uhrzeit aus einer anderen Quelle
$datePart = date_create('2024-12-24');
date_time_set($datePart, 18, 30, 0);
echo date_format($datePart, 'd.m.Y H:i:s');
// Weihnachtsabend um 18:30 Uhr
24.12.2024 18:30:00

Überlaufverhalten bei Stundenwert > 23

<?php
$date = date_create('2024-01-01');
date_time_set($date, 25, 0, 0); // 25 Stunden = nächster Tag + 1 Stunde
echo date_format($date, 'Y-m-d H:i:s');
2024-01-02 01:00:00

// Wichtig · Fallstricke

Mikrosekunden (seit PHP 7.1.0): Der Parameter $microsecond wurde erst ab PHP 7.1.0 eingeführt. Bei älteren PHP-Versionen wird dieser Parameter ignoriert oder verursacht Fehler.

Objekt-Mutation: Im Gegensatz zu DateTimeImmutable wird das übergebene DateTime-Objekt direkt verändert. Wenn das ursprüngliche Objekt erhalten bleiben soll, muss vorher eine Kopie mit clone erstellt werden.

Überlaufwerte: PHP akzeptiert Werte außerhalb der normalen Grenzen und überträgt sie automatisch. Dies kann bei unkontrollierten Benutzereingaben zu unerwarteten Datumswerten führen. Eingaben sollten daher vor der Verwendung validiert werden.