Угадывание часового пояса пользователя в PHP - PullRequest
1 голос
/ 17 августа 2010

Начиная с PHP5.3 (я думаю), требовалось, чтобы date.timezone был установлен в файле php.ini или был установлен во время выполнения с помощью функции date_default_timezone_set().Когда вы не устанавливаете это значение, вы получаете сообщение об ошибке, что-то вроде этого:

PHP Warning : date () : Itнебезопасно полагаться на настройки часового пояса системы.Вы обязаны использовать настройку date.timezone или функцию date_default_timezone_set ().Если вы использовали какой-либо из этих методов и по-прежнему получаете это предупреждение, вы, скорее всего, неправильно написали идентификатор часового пояса.Мы выбрали 'America / New_York' для '-4.0 / DST' вместо этого в ФАЙЛ в строке LINE .

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

Ответы [ 2 ]

8 голосов
/ 09 апреля 2011

Подход Майка дает вам только часовой пояс веб-сервера.Я считаю, что вы пытаетесь получить часовой пояс пользователя.Я написал функцию, используя jQuery и PHP.Это проверено и работает!

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

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

Это будет читать сессионную переменную "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 на ваш фактический домен.

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

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

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

Cheers

</Westy92>

4 голосов
/ 17 августа 2010

Я бы, вероятно, использовал функцию date_default_timezone_get():

string date_default_timezone_get  ( void  )

В порядке предпочтения эта функция возвращает часовой пояс по умолчанию:

  • Чтениечасовой пояс устанавливается с помощью функции date_default_timezone_set () (если есть)
  • Чтение переменной среды TZ (если не пусто) (до PHP 5.3.0)
  • Чтение значения date.timezoneопция ini (если установлена)
  • Запрос операционной системы хоста (если поддерживается и разрешена ОС)

http://www.php.net/manual/en/function.date-default-timezone-get.php

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