Start · Sprachen · PHP · Referenz · date_timezone_set

date_timezone_set

Funktion

Legt die Zeitzone für ein <code>DateTime</code>-Objekt fest und gibt das modifizierte Objekt zurück.

seit PHP 5.2.0 Kategorie: date

Signatur

date_timezone_set(DateTime $object, DateTimeZone $timezone): DateTime

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

Typ
DateTime
Beschreibung
Gibt das modifizierte 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;
UTC: 2024-06-15 12:00:00 UTC Berlin: 2024-06-15 14:00:00 CEST

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;
}
America/New_York : 2024-01-10 03:30:00 EST Europe/London : 2024-01-10 08:30:00 GMT Asia/Tokyo : 2024-01-10 17:30:00 JST

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