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

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.