Как получить часовой пояс пользователя, используя jquery? - PullRequest
7 голосов
/ 11 ноября 2011

Я хотел бы получить их часовой пояс с именами, такими как 'Азия / Калькутта' или 'Австралия / Дарвин'

У меня установлен php на myserver и еговремя установлено на 'UTC'

Ответы [ 6 ]

13 голосов
/ 02 марта 2012

Это мой первый пост здесь, но, надеюсь, я могу кому-то помочь. Я чувствовал себя обязанным, потому что этот сайт мне очень помог. Спасибо стека overflowflow!

http://www.pageloom.com/automatic-timezone-detection-with-javascript

Из того, что я понимаю об этом коде JavaScript, он очень точный и сможет вернуть смещение от UST, соответствующего имени часового пояса базы данных Olson, и обработать проблему перехода на летнее время (например, -5: 00, Америка / Нью-Йорк, правда).

http://www.php.net/manual/en/timezones.america.php

Приведенная выше ссылка является просто списком поддерживаемых php параметров часового пояса, которые, насколько я могу судить, согласуются с этим кодом JavaScript (я уверен, что это полезно, я просто не знаю, почему я все еще пишу свой код и я немного новичок в php / mysql).

Единственное препятствие, с которым вы столкнетесь после того, как этот код заработает на вашей html-странице, - это получение этих значений в php, а затем в mysql, если это то, что вам нужно. Я добился этого, отправив эти значения в виде $ .post с помощью JQuery. Я думаю, что это самый простой способ сделать это (пожалуйста, кто-нибудь поправит меня, если я ошибаюсь). Я полагаю, что другие альтернативы используют команду AJAX (более сложную) или куки (я думаю?).

После того, как я получил значения из кода Java-скрипта на сервер (PHP), я сохранил их как переменные сеанса, чтобы они изменились, если бы пользователь на моем сайте вошел в систему из другого часового пояса, чем обычно. Однако их также можно легко сохранить в базе данных.

Если вы используете маршрут JQuery, он должен находиться в заголовке html-документа, в котором выполняется $ .post.

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

Самый обновленный сценарий определения часового пояса можно найти по первому URL, который я разместил.

//replace this comment with the most updated timezonedetect code from that first link
var timezone = jstz.determine_timezone();
var tzoffset = timezone.offset();
var tzname = timezone.name();
var tzdst = timezone.dst();
$.post("scripts/tzdetect.php", { tzoffset: tzoffset, tzname: tzname, tzdst: tzdst } );

Получаемый файл в этом случае tzdetect.php должен выглядеть следующим образом, если вы хотите, чтобы данные сохранялись как переменные сеанса.

<?php
session_start();
$_SESSION['tzname'] = $_POST['tzname'];
$_SESSION['tzoffset'] = $_POST['tzoffset'];
$_SESSION['tzdst'] = $_POST['tzdst'];
?>
12 голосов
/ 11 ноября 2011

Для определения смещения часового пояса вы можете использовать эту функцию:

function get_time_zone_offset( ) {
  var current_date = new Date();
  return parseInt(-current_date.getTimezoneOffset() / 60);
}

Пример, который вы можете увидеть здесь

3 голосов
/ 11 ноября 2011

Вам не нужен jQuery для этого.Попробуйте следующий код:

var offset = (new Date()).getTimezoneOffset();
alert(offset);

Он сообщит текущее смещение часового пояса от браузера (в минутах).

См. этот jsfiddle в качестве доказательства .

Я думаю, вам нужно будет преобразовать его в название часового пояса самостоятельно.Если вы хотите, чтобы имена были согласованными, вы не должны зависеть от браузера пользователя.

Вы можете использовать этот код (см. this jsfiddle ):

var offset = (new Date()).getTimezoneOffset();

var timezones = {
    '-12': 'Pacific/Kwajalein',
    '-11': 'Pacific/Samoa',
    '-10': 'Pacific/Honolulu',
    '-9': 'America/Juneau',
    '-8': 'America/Los_Angeles',
    '-7': 'America/Denver',
    '-6': 'America/Mexico_City',
    '-5': 'America/New_York',
    '-4': 'America/Caracas',
    '-3.5': 'America/St_Johns',
    '-3': 'America/Argentina/Buenos_Aires',
    '-2': 'Atlantic/Azores',
    '-1': 'Atlantic/Azores',
    '0': 'Europe/London',
    '1': 'Europe/Paris',
    '2': 'Europe/Helsinki',
    '3': 'Europe/Moscow',
    '3.5': 'Asia/Tehran',
    '4': 'Asia/Baku',
    '4.5': 'Asia/Kabul',
    '5': 'Asia/Karachi',
    '5.5': 'Asia/Calcutta',
    '6': 'Asia/Colombo',
    '7': 'Asia/Bangkok',
    '8': 'Asia/Singapore',
    '9': 'Asia/Tokyo',
    '9.5': 'Australia/Darwin',
    '10': 'Pacific/Guam',
    '11': 'Asia/Magadan',
    '12': 'Asia/Kamchatka' 
};

alert(timezones[-offset / 60]);

Однако я бы не стал слишком на это полагаться.

3 голосов
/ 11 ноября 2011

Ваш вопрос на самом деле касается Javascript, а не PHP - потому что это зависит от возможностей клиента.

Насколько я понимаю, Javascript позволяет вам определять текущее смещение часового пояса (разницу между UTC и местным временем) но это не позволяет однозначно определить часовой пояс.Многие часовые пояса будут иметь одинаковое смещение в любой конкретный момент времени, но будут отличаться в другое время с точки зрения того, наблюдают ли они за переходом на летнее время и в какой момент они переходят в режим летнего времени и из него.

Если вам определенно нужен часовой пояс, вы можете составить список возможных часовых поясов и представить его пользователю - также позволяя им отменить решение о сужении, выбрав any часовой пояс.

Опять же, это действительно зависит от того, чего вы пытаетесь достичь.

0 голосов
/ 11 ноября 2011
<?
echo date("e");
?>

Это даст вывод:

Азия / Калькутта

0 голосов
/ 11 ноября 2011

Вы можете получить смещение часового пояса . Который вы можете использовать для расчета приблизительного часового пояса. Вы можете сохранить ассоциативный список смещения часового пояса и names. Однако этот метод не дает точных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...