Получить смещение часового пояса для данного местоположения - PullRequest
7 голосов
/ 12 октября 2010

Возможно ли в PHP получить смещение часового пояса для данного местоположения?Например, когда задано местоположение «Сидней / Австралия», чтобы получить смещение часового пояса как «+1100».Бонусом для этой функции будет помнить о летнем времени (т.е. он знает о летнем времени и корректирует смещение в соответствии с этим).

Ответы [ 3 ]

19 голосов
/ 12 октября 2010

Вы можете использовать DateTimeZone класс.

<?php
$timezone = new DateTimeZone("Australia/Sydney");
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds
echo ($offset < 0 ? '-' : '+').round($offset/3600).'00'; // prints "+1100"
?>
7 голосов
/ 12 октября 2010

Для отображения локальной даты / времени вы можете использовать следующее, где «Европа / Берлин» будет заменено на часовой пояс пользователя.

$date = new DateTime($value);
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s');
4 голосов
/ 12 октября 2010

Не знаю, зачем вам нужен "+1100" (а не десятичное представление), но вы можете использовать это:

$dt = new DateTime(null, new DateTimeZone('Australia/Sydney'));
$offset = $dt->getOffset()/60/60; // 11

$hours = intval($offset);
$minutes = str_pad((string)($offset - $hours) * 60, 2, '0', STR_PAD_RIGHT);
echo $hours.$minutes; // 1100

Замените null на '2010-10-01' и вы получите 1000

...