Signatur
Beschreibung
date_timezone_set() ist die prozedurale Entsprechung zur objektorientierten Methode DateTime::setTimezone(). Sie weist einem bestehenden DateTime-Objekt eine neue Zeitzone zu und konvertiert dabei den gespeicherten Zeitstempel in die Darstellung der Zielzeitzone.
Der interne Unix-Zeitstempel (UTC) des Objekts bleibt dabei unverändert – lediglich die Darstellung (Tag, Stunde, Minute usw.) wird an die neue Zeitzone angepasst. Das ist wichtig, wenn man z. B. Datums- und Uhrzeitangaben für verschiedene Regionen anzeigen möchte.
Das Ergebnis der Funktion ist das übergebene DateTime-Objekt selbst, sodass Methodenverkettung in Kombination mit dem OOP-Stil möglich ist. In reinen OOP-Code-Basen ist die Methode DateTime::setTimezone() jedoch vorzuziehen. Wer unveränderliche Datumsobjekte benötigt, sollte stattdessen DateTimeImmutable und DateTimeImmutable::setTimezone() verwenden.
Typische Anwendungsfälle sind die Darstellung von UTC-Zeitstempeln aus einer Datenbank in der Lokalzeit des Benutzers oder die Konvertierung zwischen verschiedenen Zeitzonen innerhalb einer Anwendung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTime | Das DateTime-Objekt, dessen Zeitzone geändert werden soll. Das Objekt wird direkt modifiziert. |
|
| $timezone Pflicht | DateTimeZone | Die gewünschte Zielzeitzone als DateTimeZone-Objekt, z. B. erstellt mit new DateTimeZone('Europe/Berlin'). |
Rückgabewert
DateTime-Objekt zurück. Es handelt sich um dasselbe Objekt, das als $object übergeben wurde.Beispiele
UTC-Zeit in Berliner Lokalzeit umwandeln
<?php
// Datum in UTC erstellen
$date = date_create('2024-06-15 12:00:00', new DateTimeZone('UTC'));
echo 'UTC: ' . date_format($date, 'Y-m-d H:i:s T') . PHP_EOL;
// Zeitzone auf Europe/Berlin setzen
$tz = new DateTimeZone('Europe/Berlin');
date_timezone_set($date, $tz);
echo 'Berlin: ' . date_format($date, 'Y-m-d H:i:s T') . PHP_EOL;
Mehrere Zeitzonen aus einem UTC-Zeitstempel erzeugen
<?php
$utcDate = date_create('2024-01-10 08:30:00', new DateTimeZone('UTC'));
$zones = ['America/New_York', 'Europe/London', 'Asia/Tokyo'];
foreach ($zones as $zoneName) {
// Klon erstellen, damit das Original unberührt bleibt
$local = clone $utcDate;
date_timezone_set($local, new DateTimeZone($zoneName));
echo str_pad($zoneName, 20) . ': ' . date_format($local, 'Y-m-d H:i:s T') . PHP_EOL;
}
// Wichtig · Fallstricke
Mutation statt Immutabilität: date_timezone_set() verändert das übergebene DateTime-Objekt direkt. Soll das Original erhalten bleiben, muss vorher ein Klon mit clone erstellt werden. Wer Unveränderlichkeit bevorzugt, sollte DateTimeImmutable und DateTimeImmutable::setTimezone() verwenden – dort wird stets ein neues Objekt zurückgegeben.
Zeitstempel bleibt erhalten: Der interne Unix-Timestamp ändert sich durch den Aufruf nicht. Nur die Ausgabe-Darstellung (z. B. Stunde und Minute bei date_format()) wird an die neue Zeitzone angepasst.
Zeitzonennamen: Verwende stets gültige IANA-Zeitzonennamen (z. B. Europe/Berlin), keine Abkürzungen wie CET, da letztere mehrdeutig sein können.