Возможный дубликат:
Как определить часовой пояс веб-пользователя?
Каков наилучший способ сделать это? 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'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/
Просто измените часовой пояс системы и нажмите кнопку прогона, чтобы проверить его. Если вы используете хром, вам нужно выполнить каждый тест на новой вкладке (и для перезапуска часового пояса необходимо перезапустить сафари).
Если вы хотите получить более подробную информацию о коде: https://bitbucket.org/pellepim/jstimezonedetect/