Возможный дубликат:
Как определить часовой пояс веб-пользователя?
Каков наилучший способ сделать это? php или javascript. Может кто-нибудь предоставить мне некоторые фрагменты? спасибо.
Возможный дубликат:
Как определить часовой пояс веб-пользователя?
Каков наилучший способ сделать это? php или javascript. Может кто-нибудь предоставить мне некоторые фрагменты? спасибо.
Это даст вам часовой пояс как переменную 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>
На стороне сервера это будет не так точно, как с 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...
}
Как ответил Одед. Вам нужно иметь такие функции обнаружения в javascript.
Я боролся с этим сам и понял, что смещения недостаточно. Например, он не дает вам никакой информации о летнее время. В итоге я написал код для сопоставления с базами данных zoneinfo.
Проверяя несколько дат в течение года, вы можете более точно определить часовой пояс.
Попробуйте script здесь: http://jsfiddle.net/pellepim/CsNcf/
Просто измените часовой пояс системы и нажмите "Пробег", чтобы проверить его. Если вы работаете с хромом, вам нужно выполнить каждый тест на новой вкладке (и для перезапуска часового пояса необходимо перезапустить сафари).
Если вы хотите получить более подробную информацию о коде, выполните следующие действия: https://bitbucket.org/pellepim/jstimezonedetect/