Signatur
Beschreibung
date_timestamp_set() ist die prozedurale Variante der Methode DateTime::setTimestamp(). Sie weist einem bestehenden DateTime-Objekt einen neuen Zeitpunkt zu, der als Unix-Zeitstempel (Sekunden seit 1970-01-01 00:00:00 UTC) angegeben wird.
Die Funktion eignet sich überall dort, wo man mit dem prozeduralen Datum-API arbeitet und einen rohen Unix-Zeitstempel (z. B. aus einer Datenbank, aus time() oder aus berechneten Werten) in ein vollwertiges Datum-Objekt überführen möchte, um anschließend Formatierungen, Vergleiche oder Berechnungen vorzunehmen.
Wichtig: Die intern gespeicherte Zeitzone des übergebenen DateTime-Objekts bleibt erhalten. Der Zeitstempel wird zwar als UTC-Referenz gespeichert, die Ausgabe über date_format() erfolgt jedoch in der Zeitzone des Objekts. Negative Zeitstempel (Daten vor 1970) werden ebenfalls unterstützt.
Für unveränderliche Datumsobjekte steht die äquivalente Funktion date_timestamp_set() auf DateTimeImmutable als DateTimeImmutable::setTimestamp() zur Verfügung; die prozedurale Entsprechung lautet date_timestamp_set() mit einem DateTimeImmutable-Objekt ab PHP 8.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTime | Ein DateTime-Objekt, dessen Datum und Uhrzeit gesetzt werden sollen. Wird in der Regel mit date_create() erzeugt. |
|
| $timestamp Pflicht | int | Der Unix-Zeitstempel als ganze Zahl (Sekunden seit 1970-01-01 00:00:00 UTC). Negative Werte für Daten vor dem Unix-Epoch sind erlaubt. |
Rückgabewert
DateTime-Objekt zurück. Dies ermöglicht Method-Chaining bei der objektorientierten Nutzung. Im Fehlerfall wird false zurückgegeben.Beispiele
Unix-Zeitstempel in lesbares Datum umwandeln
<?php
$timestamp = 1700000000; // Ein beliebiger Unix-Zeitstempel
$dt = date_create(); // Neues DateTime-Objekt mit aktuellem Zeitpunkt
date_timestamp_set($dt, $timestamp);
echo date_format($dt, 'd.m.Y H:i:s') . PHP_EOL;
// Ausgabe hängt von der Zeitzone ab, z. B.: 14.11.2023 23:13:20
Datenbankwert als Zeitstempel verarbeiten und formatieren
<?php
// Simulierter Datenbankwert (Unix-Zeitstempel)
$dbTimestamp = 978307200; // 2001-01-01 00:00:00 UTC
$dt = date_create('now', timezone_open('Europe/Berlin'));
date_timestamp_set($dt, $dbTimestamp);
echo 'Datum: ' . date_format($dt, 'd.m.Y') . PHP_EOL;
echo 'Uhrzeit: ' . date_format($dt, 'H:i:s') . PHP_EOL;
echo 'Wochentag: ' . date_format($dt, 'l') . PHP_EOL;
Negativen Zeitstempel für Datum vor 1970 verwenden
<?php
// 1. Januar 1960 00:00:00 UTC
$timestamp = mktime(0, 0, 0, 1, 1, 1960);
$dt = date_create();
date_timestamp_set($dt, $timestamp);
echo date_format($dt, 'd.m.Y') . PHP_EOL;
// Wichtig · Fallstricke
Zeitzonenverhalten: Der Zeitstempel selbst ist immer UTC-basiert. Die Darstellung via date_format() erfolgt in der Zeitzone des DateTime-Objekts. Wenn keine Zeitzone explizit gesetzt wurde, wird die Standard-Zeitzone aus date_default_timezone_get() verwendet.
Unterschied zu DateTimeImmutable: date_timestamp_set() verändert das übergebene Objekt direkt. Wer unerwünschte Seiteneffekte vermeiden möchte, sollte DateTimeImmutable::setTimestamp() verwenden, das eine neue Instanz zurückgibt.
Integer-Overflow auf 32-Bit-Systemen: Auf 32-Bit-Systemen ist der Wertebereich für Unix-Zeitstempel auf ±2.147.483.647 begrenzt (Jahr 2038-Problem). Auf 64-Bit-Systemen gibt es diese Einschränkung nicht.