#php #timezone #utc #datetimeoffset
#php #Часовой пояс #utc #datetimeoffset
Вопрос:
я пишу веб-сервис 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);
Есть идеи? Спасибо!
Комментарии:
1. -18000 — это смещение, а не идентификатор часового пояса. Для получения действительных идентификаторов часового пояса перейдите по этой ссылке .
2. я буду использовать ваш $ usertime вместо time () для вычисления дат 🙂
Ответ №1:
Чтобы получить текущее серверное время
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) != ' ') amp;amp; (substr($diff,0,1) != '-')) $diff = ' ' . $diff;
$usertime = strtotime($diff, time());
echo date('Y-m-d H:i:s', $usertime);
Вывод UTC-5 (время в Эквадоре -> Кито БЕЗ DST), идентификатор часового пояса php 'America/Guayaquil'
.
2011-04-12 13:39:43
PHP.net руководство:
Смещение часового пояса в секундах. Смещение для часовых поясов к западу от UTC всегда отрицательное, а для часовых поясов к востоку от UTC всегда положительное. (с-43200 по 50400)
Комментарии:
1. спасибо за код, отлично сработал! приятная деталь в выяснении, где был мой часовой пояс, хехе.
Ответ №2:
date_default_timezone...
Функции ожидают строку, дающую что-то вроде «Африка / Луанда» или что-то еще.
Я предлагаю программный поиск соответствующего смещения в базе данных часовых поясов. Если я правильно помню, это в минутах от UTC, поэтому вы должны разделить указанное вам смещение на 60.
Комментарии:
1. смещение задается в секундах… если разделить 18000 на 60, получится разница в 300 часов… просто невозможно UTC-300 🙂
2. 18000 будет составлять 300 минут или 5 часов.
3. Да, поэтому вы должны разделить смещение на 3600, чтобы получить разницу UTC в часах UTC-5, верно?