Signatur
Beschreibung
datefmt_set_timezone() ist die prozedurale Variante der Methode IntlDateFormatter::setTimeZone() und legt die Zeitzone fest, die der Formatter beim Formatieren von Datumswerten und beim Parsen von Datums-Strings verwenden soll. Sie ersetzt eine zuvor gesetzte Zeitzone vollständig.
Als Zeitzone kann ein IntlTimeZone-Objekt, ein DateTimeZone-Objekt, ein Zeitzonenbezeichner als String (z. B. 'Europe/Berlin') oder null übergeben werden. Bei null wird die aktuell in PHP konfigurierte Standard-Zeitzone (date_default_timezone_get()) verwendet.
Diese Funktion ist besonders nützlich, wenn ein einmal erstellter Formatter in verschiedenen Zeitzonen-Kontexten wiederverwendet werden soll, ohne ihn neu erzeugen zu müssen – etwa bei der Darstellung von Terminen für Nutzer in unterschiedlichen Regionen.
Beachte, dass eine ungültige Zeitzone-Angabe dazu führt, dass die Funktion false zurückgibt und die bisherige Zeitzone des Formatters unverändert bleibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Das IntlDateFormatter-Objekt, dessen Zeitzone geändert werden soll. |
|
| $timezone Pflicht | IntlTimeZone|DateTimeZone|string|null | Die neue Zeitzone. Akzeptiert ein IntlTimeZone- oder DateTimeZone-Objekt, einen Zeitzonenbezeichner als String (z. B. 'America/New_York') oder null, um die PHP-Standard-Zeitzone zu verwenden. |
Rückgabewert
true zurück, wenn die Zeitzone erfolgreich gesetzt wurde, andernfalls false (z. B. bei einem ungültigen Zeitzonenbezeichner).Beispiele
Zeitzone eines Formatters nachträglich ändern
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::SHORT,
'Europe/Berlin'
);
$timestamp = mktime(12, 0, 0, 6, 15, 2024);
echo datefmt_format($formatter, $timestamp) . PHP_EOL;
// Ausgabe mit Europe/Berlin
datefmt_set_timezone($formatter, 'America/New_York');
echo datefmt_format($formatter, $timestamp) . PHP_EOL;
// Ausgabe mit America/New_York
Zeitzone auf PHP-Standard zurücksetzen mit null
<?php
date_default_timezone_set('Asia/Tokyo');
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::MEDIUM,
IntlDateFormatter::SHORT,
'Europe/London'
);
$timestamp = mktime(0, 0, 0, 1, 1, 2024);
echo datefmt_format($formatter, $timestamp) . PHP_EOL;
// Ausgabe in Europe/London
// Zurück zur PHP-Standardzeitzone (Asia/Tokyo)
$result = datefmt_set_timezone($formatter, null);
var_dump($result);
echo datefmt_format($formatter, $timestamp) . PHP_EOL;
// Wichtig · Fallstricke
Ungültige Zeitzone: Wird ein nicht existierender oder fehlerhafter Zeitzonenbezeichner übergeben, gibt die Funktion false zurück und die Zeitzone des Formatters bleibt unverändert. Es wird kein PHP-Fehler ausgelöst – prüfe daher immer den Rückgabewert.
OOP-Äquivalent: Diese Funktion entspricht IntlDateFormatter::setTimeZone(). In modernem Code wird die objektorientierte Variante bevorzugt.
Abhängigkeit von der ICU-Bibliothek: Die verfügbaren Zeitzonen hängen von der installierten ICU-Version ab und können von PHP's eigener Zeitzonendatenbank abweichen.