Ваше мнение важно для нас.
Поделитесь своими предоложениями и пожеланиями.

Получение таймзоны пользователя


Как лучше всего это сделать в вебе? На php или javascript. Есть ли у кого-то заготовки для этого? Спасибо.
0

Ответы

0
Ссылка
Для этой задачи нам понадобится javascript, а конкретно метод getTimezoneOffset() Date-объекта:
var d = new Date();
var timezone = d.getTimezoneOffset();

Можно поместить полученное значение в поле формы и отправить его на сервер, а там обработать PHP.
0
Ссылка
Следующий код вычислит пользовательскую временную зону и положит в переменную PHP. Я написал небольшую функцию используя jQuery и PHP. Она протестированна и работает.
Поместите следующий код на PHP-странице(желательно вначале), где вы хотите иметь значение временной зоны в переменной:

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


Он вычитает значение сессионной переменной "timezone", которое мы сейчас установим.

На той же странице, для начала подключите jQuery:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

Далее вставьте следующее:
<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 вместо "domain.com" нужно указать Ваш домен.

Ну и последнее, собственно timezone.php. Вобщем-то, ничего неожиданного:
<?php
session_start();
$_SESSION['timezone'] = $_GET['timezone'];
?>

Если все сработает нормально, сначала загрузится первая страница, выполнит необходимый JavaScript, а затем перезагрузится. За тем можно будет прочесть значение переменной $timezone. Она содержит значение UTC/GMT смещения текущей временной зоны (например, GMT +2).
0
Ссылка
Я уже почти сдался и начал думать, что это вообще невозможно. Спасибо, огромное.
0
Ссылка
У меня все время валится ошибка, о том что $timezone undefined. Почему?
0
Ссылка
Мне вообще кажется, что это решение абсолютно неправильное, поскольку позволяет пользователю в любой момент изменить время, на то, которое ему хочется, просто отправив запрос на domain.com/timezone.php
0
Ссылка
На серверной стороне, эту задачу решить несколько сложнее(и менее точно) чем на JavaScript. Но, в некоторых ситуациях бывает необходимо. На этот случай предлагаю следующее решение.
Мы будем использовать Geo-IP сервис, для решения этой задачи. Некоторые из них, например, этот, предоставляют информацию о временных зонах, чем мы и воспользуемся:

$ip     = $_SERVER['REMOTE_ADDR']; // получием IP-адрес пользователя
$json = file_get_contents( 'http://smart-ip.net/geoip-json/' . $ip); // обращаемся к Geo-IP сервису для получения временной зоны по IP
// возможно следовало бы добавить проверки, на то получили ли мы ответ, удалось ли разпарсить JSON и т. д.(но мы не будем)
$ipData = json_decode( $json, true);

if ($ipData['timezone']) {
$tz = new DateTimeZone( $ipData['timezone']);
$now = new DateTime( 'now', $tz); // DateTime-объект в пользовательской временной зоне
} else {
// в этом случаи нам не удалось определить временную зону.....сделаем что-то другое....
}
0
Ссылка
Для использования временной зоны на клиенте можно использовать следующий скрипт: http://jsfiddle.net/pellepim/CsNcf/
Для того, чтоб проверить этот код, просто измените временную зону и нажмите "Run". В Chrome каждый тест придется делать в отдельной табе(Safari придется вообще перегрузить, чтоб подтянулись изменения временной зоны).
Больше информации о данном коде, можно получить тут.
Для того, чтоб отвечать на вопросы или зарегистрируйтесь.
ИТ-цитата
"Настоящие программисты не комментируют свой код. Раз его было тяжело писать, пусть его будет тяжело и читать."
Annonimus