Как получить часовой пояс пользователей по их первому запросу (лучшие практики) - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь получить часовой пояс пользователя по его первому запросу с помощью Zend Framework. В настоящее время, когда я получаю часовой пояс, я сохраняю его в переменной $_SESSION.

Вот мой контроллер действий:

public function init()
{
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
    $ajaxContext->addActionContext('timezone', 'html')->initContext();    
} 

public function timezoneAction()
{
    $_SESSION['tz'] = $this->_getParam('tzName');  
}

Мне известно, что на самом деле нет способа доступа к этой переменной сеанса во время первого запроса через Ajax, поскольку JavaScript является клиентским скриптом и обнаружение происходит после первого запроса. Также нет способа получить часовой пояс пользователя через HTTP-заголовок.

Тогда как получить часовой пояс пользователя по его первому запросу ? Является ли geo-ip единственным доступным решением? Каковы лучшие практики? Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Если я правильно вас понял, проблема в том, что:

  • Какой-то (новый) пользователь загружает страницу.
  • Вы хотите, чтобы пользователь увидел что-то, что отражает егочасовой пояс (вероятно, некоторое время UTC, преобразованное в их часовой пояс.
  • Во время этого первого запроса сервер не знает, какой у них часовой пояс.
  • WAT DO?

Самое прямое решение - сделать все это на стороне клиента (если я не пропущу некоторые требования - ваш вопрос не совсем ясен относительно вашего контекста). Обеспечьте вывод содержимого сервера в UTC, завернутый в некоторый элемент HTML со специальным классом(т. е. <span class="datetime">2012-01-2 01:02:03 UTC</span>, и затем некоторые javascript заменяют содержимое этих элементов на более удобное для пользователя, локализованное представление местного времени.

Конечно, JS на самом деле не дает вамчасовой пояс. Он просто дает вам смещение (через getTimezoneOffset ()), но этого должно быть достаточно для отображения, если я не забуду что-то (что довольно вероятно, так как у меня есть расплывчатая записьЯ решил, что это разочаровывает в какой-то момент, но я думаю, что это потому, что я хотел фактический часовой пояс вместо смещения из-за перехода на летнее время).

0 голосов
/ 03 января 2012

Отправьте время в запросе AJAX на ваш сервер и сравните его с временем вашего сервера.Рассчитайте разницу, а затем используйте ее для определения часового пояса пользователя.

Вы также можете использовать Geo-Ip, чтобы выяснить, откуда ваш пользователь входит в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...