im писать веб-службу twitter в php. Когда пользователь подписывается, я получаю этот узел:
<utc_offset>-18000</utc_offset>
Я должен изменить часовой пояс сценария, чтобы он адаптировался к реальному часовому поясу пользователя. Единственная функция php, которую я нашел для этого: date_default_timezone_set ($ timezone_identifier), но она не позволит мне использовать -18000 в качестве параметра $ timezone_identifier.
Итак, как я могу изменить текущий часовой пояс пользователя на основе двух значений: смещение UTC сервера и смещение UTC пользователя
BTW, вот как я получаю значение смещения 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);
Есть идеи? Благодаря!
Чтобы получить текущее время сервера
date_default_timezone_set(date_default_timezone_get()); echo date('Ymd 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('Ymd H:i:s', $usertime);
Выход UTC-5 (Эквадор -> Время Quito NO DST), идентификатор часовой пояс php 'America/Guayaquil'
.
2011-04-12 13:39:43
Руководство PHP.net:
Смещение временной зоны в секундах. Смещение для часовых поясов к западу от UTC всегда отрицательное, а для востока от UTC всегда положительное. (От -43200 до 50400)
Функции date_default_timezone...
ожидают, что строка date_default_timezone...
что-то вроде «Африка / Луанда» или что-то еще.
Я предлагаю программный поиск по базе данных часового пояса для соответствующего смещения. Если я правильно помню, они находятся в минутах от UTC, поэтому вы должны разделить смещение, которое вы даете на 60.