DateTimeZone::getOffset()
работает немного иначе, чем думает большинство людей. Он рассчитывает смещение по Гринвичу для экземпляра DateTimeZone
смещение для даты, переданной в качестве параметра. Дата, переданная в качестве параметра, затем преобразуется в тот же часовой пояс, что и экземпляр (применяется DST и другие правила), и для этой даты рассчитывается смещение.
Итак, ваш код прямо сейчас вычисляет смещение часового пояса по Гринвичу Europe/London
.. Поскольку Europe/London
сейчас по Гринвичу (по сравнению с BMT), вы получаете 0. (Попробуйте дату в августе, вы получите 36000).
Если вы хотите текущую разницу между двумя часовыми поясами, используйте этот код ...
function timezone_diff($origin, $compareTo, $forDate = "now") {
$dtzOrigin = new DateTimeZone($origin);
$dtzCompareTo = new DateTimeZone($compareTo);
$compareDate = new DateTime($forDate);
$offsetOrigin = $dtzOrigin->getOffset($compareDate);
$offsetCompareTo = $dtzCompareTo->getOffset($compareDate);
return $offsetCompareTo - $offsetOrigin;
}