Получить часовой пояс пользователя
Возможный дубликат:
Как я могу определить часовой пояс веб-пользователя?
Какой лучший способ сделать это? php или javascript. Может кто-нибудь предоставить мне некоторые фрагменты? Благодарю.
3 ответа
Это даст вам часовой пояс как переменную 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-адрес на фактический домен.
Одна последняя вещь. Вы, наверное, задаетесь вопросом, что это за хрень timezone.php. Ну, это просто так: (создайте новый файл с именем timezone.php и укажите на него вышеуказанный URL)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
Если это работает правильно, он сначала загрузит страницу, выполнит JavaScript и перезагрузит страницу. После этого вы сможете прочитать переменную $timezone и использовать ее в свое удовольствие! Возвращает текущее смещение часового пояса UTC/GMT (GMT -7) или любой другой часовой пояс, в котором вы находитесь.
Вы можете прочитать больше об этом в моем блоге
ура
</Westy92>
На стороне сервера это будет не так точно, как с JavaScript. Между тем, иногда требуется решить такую задачу. Просто, чтобы поделиться возможным решением в этом случае я пишу этот ответ.
Если вам нужно определить часовой пояс пользователя, это можно сделать с помощью сервисов Geo-IP. Некоторые из них предоставляют часовой пояс. Например, этот ( http://smart-ip.net/geoip-api) может помочь:
<?php
$ip = $_SERVER['REMOTE_ADDR']; // means we got user's 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's 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's timezone
} else {
// we can't determine a timezone - do something else...
}
Так же, как ответил Одед. Вы должны иметь такого рода функции обнаружения в JavaScript.
Я сам с этим боролся и понял, что смещения недостаточно. Например, он не дает никакой информации о переходе на летнее время. В итоге я написал некоторый код для сопоставления с ключами базы данных zoneinfo.
Проверяя несколько дат около года, вы можете более точно определить часовой пояс.
Попробуйте скрипт здесь: http://jsfiddle.net/pellepim/CsNcf/
Просто измените часовой пояс вашей системы и нажмите "Запустить", чтобы проверить его. Если вы используете Chrome, вы должны выполнять каждый тест на новой вкладке (и safar необходимо перезапустить, чтобы определить изменения часового пояса).
Если вы хотите получить более подробную информацию о коде, проверьте: https://bitbucket.org/pellepim/jstimezonedetect/