int offset does not cover fractional offsets of "rogue" locations such as Nepal etc.
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
DateTimeZone::getOffset -- timezone_offset_get — Liefert die Zeitverschiebung gegenüber der GMT
Objektorientierter Stil
Prozeduraler Stil
Diese Funktion gibt für das im Parameter datetime
angegebene Datum und die Uhrzeit die Zeitverschiebung gegenüber der GMT
zurück. Die Abweichung von der GMT wird mit den Zeitzoneninformationen
berechnet, die im verwendeten DateTimeZone-Objekt enthalten sind.
object
Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTimeZone-Objekt.
datetime
Das DateTime-Objekt, das das Datum und die Uhrzeit enthält, von dem/der aus die Zeitverschiebung berechnet werden soll.
Gibt die Zeitverschiebung in Sekunden zurück.
Beispiel #1 DateTimeZone::getOffset()-Beispiele
<?php
// Erstellen zweier Zeitzonenobjekte, eines für Taipeh (Taiwan) und eines für
// Tokio (Japan)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");
// Erstellen zweier DateTime-Objekte, die denselben Unix-Zeitstempel enthalten,
// aber unterschiedliche Zeitzonen zugewiesen bekommen.
$dateTimeTaipei = new DateTime("now", $dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now", $dateTimeZoneJapan);
// Berechnen der Abweichung des im Objekt $dateTimeTaipei enthaltenen
// Datums und der Uhrzeit von der GMT, wobei allerdings die für Tokio
// ($dateTimeZoneJapan) festgelegten Zeitzonenregeln verwendet werden.
$timeOffset = $dateTimeZoneJapan->getOffset($dateTimeTaipei);
// Sollte int(32400) anzeigen (für Daten nach
// Samstag, 8. September 01:00:00 1951 JST).
var_dump($timeOffset);
?>
int offset does not cover fractional offsets of "rogue" locations such as Nepal etc.
Note that the DateTime parameter has no effect in the result returned by DateTimeZone::getOffset($DateTime), unless, it refers to a DateTime where there is daylight savings in the referenced DateTimeZone.
Ex.:
<?php
$timezone_brl = new DateTimeZone('America/Sao_Paulo');
$timezone_eng = new DateTimeZone('Europe/London');
$timezone_aus = new DateTimeZone('Australia/Brisbane');
$dateTimes = [
new DateTime()
, new DateTime('now', $timezone_eng)
, new DateTime('now', $timezone_aus)
, new DateTime('now', $timezone_brl)
, new DateTime('2000-06-10', $timezone_brl)
, new DateTime('2000-12-10', $timezone_brl)
, new DateTime('2020-12-10', $timezone_brl)
];
foreach($dateTimes as $dateTime)
{
echo "\n" . $timezone_brl->getOffset($dateTime);
}
/**
* -10800
* -10800
* -10800
* -10800
* -10800 // No daylight savings in June/2000
* - 7200 // Brazil had daylight savings until 2020
* -10800 // No more daylight savings, so it returns -10800
*/
?>