Как получить часовую зону пользователя с помощью jquery?

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

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

Solutions Collecting From Web of "Как получить часовую зону пользователя с помощью jquery?"

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

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

Из того, что я понимаю об этом JavaScript-коде, он очень точен и сможет вернуть смещение от UST, соответствующее имя часового пояса Olson Database и обработать проблему с летним временем (например, -5: 00, America / New_york, true ).

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

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

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

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

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

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

Самый последний скрипт timezonedetect можно найти, связанный с этим первым 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']; ?> 

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете использовать этот код (см. Этот 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]); 

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

 <? echo date("e"); ?> 

Это даст результат:

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

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