Изменение текущего часового пояса пользователя на основе смещения UTC сервера и смещения UTC пользователя - PullRequest
4 голосов
/ 12 апреля 2011

я пишу твиттер в 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);

Есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Получить текущее время сервера

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 (Эквадор -> Кито время, без летнего времени), php идентификатор часового пояса 'America/Guayaquil'.

2011-04-12 13:39:43

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

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

1 голос
/ 12 апреля 2011

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

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

...