Подтвердить что ты не робот

Как получить часовую зону клиента?

Я пишу приложение с использованием Zend_Framework (поэтому решение может положиться на него).

Как получить часовую зону клиента?

Например, если кто-то из Москвы, России, я хочу получить 3 * 60 * 60 (потому что есть UTC + 3). Если он в Великобритании, я хочу ноль. Если он использует UTC-3: 30 (Канада?), Я хочу -3,5 * 60 * 60.

(это не вопрос о формате - я в порядке с получением "Европа/Москва" или "UTC-3" для Санкт-Петербурга, Россия, скорее о том, чтобы использовать клиентскую зону в часовом поясе. Но предпочтительнее дельта за секунды )

Единственное решение, которое приходит на ум, - дать javascript получить локальное время для меня и перенаправить.

4b9b3361

Ответ 1

Отметьте эту статью о том, как определить часовой пояс, установив Cookie через JavaScript, который будет содержать часовой пояс клиента. Это довольно долго, но это потому, что это довольно многословие. Я реализовал решение по этим направлениям в одном из своих приложений, и он работает очень хорошо.

Вы также можете отправить часовой пояс через Ajax на сервер и заставить его делать то, что вам нужно сделать с этим. Или, если вы не проводите с ним никаких расчетов с серверами, просто примените клиентскую сторону часового пояса там, где это необходимо. Действительно зависит от вашего использования.

В дополнение к этому, я предлагаю вам позволить посетителю самому установить часовую зону и сохранить это в Cookie или сеансе.

Ответ 2

Я написал функцию, использующую jQuery и PHP. Это проверено и работает!

На странице PHP, где вы хотите иметь часовой пояс в качестве переменной, используйте этот фрагмент кода где-то рядом с верхней частью страницы:

<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>

Это будет читать переменную сеанса "время", которую мы сейчас собираемся создать.

На этой же странице в первую очередь нужно включить jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

Кроме того, в jQuery, ниже, вставьте это:

<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://domain.com/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

Вы можете или не заметили, но вам нужно изменить URL-адрес вашего фактического домена.

Последнее. Вы, наверное, задаетесь вопросом, что такое heck timezone.php. Ну, это просто так: (создайте новый файл с именем timezone.php и укажите его с указанным выше URL-адресом)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

Если это работает правильно, он сначала загрузит страницу, выполнит JavaScript и перезагрузит страницу. Затем вы сможете прочитать переменную $timezone и использовать ее для вашего удовольствия! Он возвращает текущее смещение часовой пояс UTC/GMT (GMT -7) или любой часовой пояс, в котором вы находитесь.

Ответ 3

Это решение для файлов cookie с очень небольшими накладными расходами:

  echo <<<EOE
   <script type="text/javascript">
     if (navigator.cookieEnabled)
       document.cookie = "tzo="+ (- new Date().getTimezoneOffset());
   </script>
EOE;
  if (!isset($_COOKIE['tzo'])) {
    echo <<<EOE
      <script type="text/javascript">
        if (navigator.cookieEnabled) document.reload();
        else alert("Cookies must be enabled!");
      </script>
EOE;
    die();
  }
  $ts = new DateTime('now', new DateTimeZone('GMT'));
  $ts->add(DateInterval::createFromDateString($_COOKIE['tzo'].' minutes'));

Ответ 4

Я думаю, что ваш лучший выбор - угадать, основываясь на заголовке Accept-Language, отправленном клиентом.