Изменение текущего часового пояса пользователя на основе смещения UTC сервера и смещения UTC пользователя

Я пишу веб-сервис Twitter на php. Когда пользователь входит в систему, я получаю этот узел:

<utc_offset>-18000</utc_offset>

Мне нужно изменить часовой пояс скрипта, чтобы он адаптировался к реальному часовому поясу пользователя. Единственная функция php, которую я нашел для этого: date_default_timezone_set ($ timezone_identifier) ​​, но я не могу использовать -18000 в качестве параметра $ timezone_identifier.

Итак, как я могу изменить часовой пояс текущего пользователя на основе двух значений: смещение UTC сервера и смещение пользователя UTC

Кстати, вот как я получаю значение смещения сервера UTC:

$this_tz_str = date_default_timezone_get();
$this_tz = new DateTimeZone($this_tz_str);
$now = new DateTime("now", $this_tz);
$offset = $this_tz->getOffset($now);

Любые идеи? Спасибо!


person Andres SK    schedule 12.04.2011    source источник
comment
-18000 - это смещение, а не идентификатор часового пояса. Чтобы узнать действительные идентификаторы часового пояса, перейдите по этой ссылке.   -  person Wh1T3h4Ck5    schedule 12.04.2011
comment
я буду использовать ваше $ usertime вместо time () для вычисления дат :)   -  person Andres SK    schedule 13.04.2011


Ответы (2)


Чтобы узнать текущее время сервера

date_default_timezone_set(date_default_timezone_get());
echo date('Y-m-d H:i:s', time());

Вывод для Европы / Парижа (мои настройки сервера; UTC + 2)

2011-04-12 20:39:43

Чтобы получить время пользователя по смещению

$user_offset = '-18000';
date_default_timezone_set('UTC');
$diff = "$user_offset seconds";
if ((substr($diff,0,1) != '+') && (substr($diff,0,1) != '-')) $diff = '+' . $diff;
$usertime = strtotime($diff, time());
echo date('Y-m-d H:i:s', $usertime);

Вывод UTC-5 (Эквадор -> Кито, NO DST), идентификатор часового пояса php 'America/Guayaquil'.

2011-04-12 13:39:43

Руководство PHP.net:

Смещение часового пояса в секундах. Смещение для часовых поясов к западу от UTC всегда отрицательно, а для часовых поясов к востоку от UTC всегда положительно. (От -43200 до 50400)

person Wh1T3h4Ck5    schedule 12.04.2011
comment
спасибо за код, отлично поработал! Хорошая деталь о том, как узнать, где был мой часовой пояс, хе-хе. - person Andres SK; 12.04.2011

Функции date_default_timezone... ожидают, что строка будет содержать что-то вроде «Африка / Луанда» или что-то еще.

Я предлагаю программно искать подходящее смещение в базе данных часовых поясов. Если я правильно помню, это в минутах от UTC, поэтому вы должны разделить полученное смещение на 60.

person wallyk    schedule 12.04.2011
comment
смещение задается в секундах ... если вы разделите 18000 на 60, это разница в 300 часов ... просто невозможно UTC-300 :) - person Wh1T3h4Ck5; 12.04.2011
comment
18000 будет 300 минут или 5 часов. - person wallyk; 12.04.2011
comment
Да, поэтому вы должны разделить смещение на 3600, чтобы получить разницу UTC в часах UTC-5, верно? - person Wh1T3h4Ck5; 12.04.2011