Start · Sprachen · PHP · Referenz · date_timestamp_set

date_timestamp_set

Funktion

Setzt Datum und Uhrzeit eines <code>DateTime</code>-Objekts anhand eines Unix-Zeitstempels.

seit PHP 5.3.0 Kategorie: date

Signatur

date_timestamp_set(DateTime $object, int $timestamp): DateTime

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

Typ
DateTime
Beschreibung
Gibt das modifizierte 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
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;
Datum: 01.01.2001 Uhrzeit: 01:00:00 Wochentag: Monday

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;
01.01.1960

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