Как получить часовую зону пользователя с помощью jquery?
Я хотел бы получить их часовой пояс с именами типа "Азия/Калькутта" или "Австралия/Дарвин"
У меня установлен php на myserver и его время установлено на 'UTC'
Ответы
Ответ 1
Это мой первый пост, но, надеюсь, я могу помочь кому-то. Я чувствовал себя вынужденным, потому что этот сайт мне очень помог. Спасибо участникам 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 (я уверен, что это полезно, я просто не знаю, почему пока я все еще пишу свой код и я новичок в php/mysql).
Единственное препятствие, с которым вы столкнетесь после получения этого кода, работающего на вашей странице html, скорее всего, получит эти значения в php, а затем в mysql, если это то, что вам нужно. Я достиг этого, отправив эти значения как $.post с помощью JQuery. Я думаю, что это самый простой способ сделать это (пожалуйста, кто-то поправьте меня, если я ошибаюсь). Я полагаю, что другие альтернативы используют команду AJAX (более сложную) или файлы cookie (я думаю?).
После того, как я получил значения из кода Java- script на сервер (PHP), я сохранил их как переменные сеанса, чтобы они изменились, если пользователь на моем сайте зарегистрировался из другого часового пояса, а затем обычный. Однако их можно было легко сохранить и в базе данных.
Если вы используете маршрут JQuery, это должно быть в заголовке html-документа, где выполняется $.post.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
Наиболее обновленный timezonedetect 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'];
?>
Ответ 2
Для обнаружения смещения временной зоны вы можете использовать эту функцию:
function get_time_zone_offset( ) {
var current_date = new Date();
return parseInt(-current_date.getTimezoneOffset() / 60);
}
Пример вы можете увидеть здесь
Ответ 3
Ваш вопрос действительно о Javascript, а не о PHP, потому что он зависит от возможностей клиента.
Как я понимаю, Javascript позволяет определить текущее смещение часового пояса (разность между временем по Гринвичу и местному времени), но это не позволяет вам однозначно определить часовой пояс. Многие часовые пояса будут иметь одинаковое смещение в любой конкретный момент времени, но будут отличаться в другое время, с точки зрения того, соблюдают ли они летнее время и в какой момент они меняются и выходят из летнего времени.
Если вам определенно нужен часовой пояс, вам может понадобиться составить список возможных часовых поясов и представить это пользователю - также позволяя им переопределить сужение решения, выбрав любой часовой пояс.
Опять же, это действительно зависит от того, чего вы пытаетесь достичь.
Ответ 4
Для этого вам не нужен 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]);
Однако я бы не стал слишком полагаться на это.
Ответ 5
Вы можете получить смещение часового пояса. Который вы можете использовать для расчета приблизительного часового пояса. Вы можете сохранить ассоциативный список смещения часового пояса и names
.
Однако этот метод не дает никаких точных значений.
Ответ 6
<?
echo date("e");
?>
Это даст результат:
Азия/Калькутта