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

Получить часовой пояс пользователя

Возможный дубликат:
Как определить часовой пояс веб-пользователя?

Каков наилучший способ сделать это? php или javascript. Может кто-нибудь предоставить мне некоторые фрагменты? спасибо.

4b9b3361

Ответ 1

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

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

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

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

На той же странице, в разделе <head>, в первую очередь вам нужно включить jQuery:

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

Также в разделе <head> вставьте этот 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) или любой часовой пояс, в котором вы находитесь.

Подробнее об этом можно узнать в блоге

Приветствия

</Westy92>

Ответ 2

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

Если вам нужно определить часовой пояс пользователя, это можно сделать через службы Geo-IP. Некоторые из них предоставляют часовой пояс. Например, этот (http://smart-ip.net/geoip-api) может помочь:

<?php
$ip     = $_SERVER['REMOTE_ADDR']; // means we got user IP address 
$json   = file_get_contents( 'http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP
// maybe it good to add some checks (if/else you've got an answer and if json could be decoded, etc.)
$ipData = json_decode( $json, true);

if ($ipData['timezone']) {
    $tz = new DateTimeZone( $ipData['timezone']);
    $now = new DateTime( 'now', $tz); // DateTime object corellated to user timezone
} else {
   // we can't determine a timezone - do something else...
}

Ответ 3

Как ответил Одед. Вам нужно иметь такие функции обнаружения в javascript.

Я боролся с этим сам и понял, что смещения недостаточно. Например, он не дает вам никакой информации о летнее время. В итоге я написал код для сопоставления с базами данных zoneinfo.

Проверяя несколько дат в течение года, вы можете более точно определить часовой пояс.

Попробуйте script здесь: http://jsfiddle.net/pellepim/CsNcf/

Просто измените часовой пояс системы и нажмите "Пробег", чтобы проверить его. Если вы работаете с хромом, вам нужно выполнить каждый тест на новой вкладке (и для перезапуска часового пояса необходимо перезапустить сафари).

Если вы хотите получить более подробную информацию о коде, выполните следующие действия: https://bitbucket.org/pellepim/jstimezonedetect/