2016-04-28 3 views
0

Для онлайн-сообщества, которое я создаю на PHP, мне нужно установить часовой пояс по умолчанию для часового пояса пользователя. Это код, у меня сейчас, который возвращает смещение часового пояса пользователя на основе некоторого JS:PHP - timezone_name_from_abbr показывает неправильный часовой пояс

$timezone = $_SESSION['time']; 
$timezone_offset = filter_var($timezone, FILTER_SANITIZE_NUMBER_INT); 

Скрипт помещает смещение часового пояса в сеансе и эта сессия затем присваивается переменной $ часового пояса. Когда я эхо $ часового пояса, я получаю «GMT 2», который является правильным, поэтому я уверен, что я только получил номер 2, чтобы использовать в следующем коде, чтобы получить и установить часовой пояс:

$timezoneName = timezone_name_from_abbr("", $timezone_offset*3600, false); 
date_default_timezone_set($timezoneName); 

В то время как $ переменная timezone показывает правильное смещение часового пояса для моего местоположения: GMT +2 (я в Брюсселе, Бельгия), я по-прежнему получаю неправильный часовой пояс, когда я повторяю свой часовой пояс по умолчанию с date_default_timezone_get(), т.е. Европа/Хельсинки, у которой есть смещение GMT +3, а не GMT ​​+2.

Кто-нибудь знает, что может это сделать, и как я могу это исправить, поэтому он показывает правильный часовой пояс, Европа/Брюссель или Европа/Париж.

ответ

1

«GMT +2» не точно часовой пояс, для «Европы/Брюсселя»: это фактического Timezone, из-за переход на летнее время. Стандартный часовой пояс для «Европа/Брюссель» - «GMT +1».

Чтобы получить правильные даты, вы должны установить $_SESSION['time'] в «GMT +1» или в «CET» (время Центральной Европы): таким образом, вы будете иметь нужное время в течение всего года.

Однако наилучшим способом является указание непосредственно «Европа/Брюссель», поскольку настройки DST могут меняться для каждой страны (на самом деле, правила CET DST обсуждаются ЕС).

Смежные вопросы