Как я могу собрать информацию о часовом поясе посетителя? Мне нужен часовой пояс, а также часы смещения по Гринвичу.
javascript
timezone
Árvíztűrő tükörfúrógép
источник
источник
Ответы:
Обратите внимание, что не все часовые пояса смещены на целые часы: например, Ньюфаундленд - это UTC минус 3 ч 30 м (исключая летнее время из уравнения).
источник
getTimezoneOffset
неточности? Статья, на которую вы ссылаетесь, датирована июнем 2007 года и не содержит подробностей о том, как эта функция является неточной. И на самом деле указаннаяjsTimezoneDetect
вами библиотека используетgetTimezoneOffset
сама себя.var hrs = -(new Date().getTimezoneOffset() / 60)
чтобы получить смещение в часах, которые обычно используютсяtimezone
! =utc offset
Использование смещения для расчета часового пояса - неправильный подход, и вы всегда будете сталкиваться с проблемами. Часовые пояса и правила перехода на летнее время могут меняться несколько раз в течение года, и сложно идти в ногу с изменениями.
Чтобы получить часовой пояс IANA системы в JavaScript, вы должны использовать
По состоянию на сентябрь 2019 года это работает в 95% браузеров, используемых по всему миру .
Старая информация о совместимости
ecma-402 / 1.0 говорит, что
timeZone
может быть неопределенным, если не предоставлено конструктору. Тем не менее, будущий проект (3.0) исправил эту проблему, изменив часовой пояс системы по умолчанию.в ecma-402 / 3.0, которая все еще находится в черновике
источник
Я понимаю, что этот ответ немного не по теме, но я думаю, что многие из нас, ищущих ответ, также хотели отформатировать часовой пояс для отображения и, возможно, получить сокращение зоны тоже. Так что вот так ...
Если вы хотите, чтобы часовой пояс клиента был правильно отформатирован, вы можете положиться на метод JavaScript Date.toString и выполнить:
Это даст вам «GMT-0400 (EST)», например, включая минуты часового пояса, когда это применимо.
Кроме того, с помощью регулярного выражения вы можете извлечь любую нужную часть:
Для «GMT-0400 (EDT)»:
Для «GMT-0400»:
Для просто "EDT":
Для всего "-0400":
Ссылка Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
источник
split[4] + " " + split[5]
?!split
содержит:["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
так что результатDaylight Time)
new Date().toString()
, полностью зависит от ваших настроек локали. Ожидать, что результаты других клиентов будут напоминать ваши, - очень плохая идея.На вопрос о том, как получить смещение в минутах в виде целого числа, уже отвечено, но в случае, если кто-то хочет локальное смещение по Гринвичу в виде строки, например
"+1130"
:источник
pad(parseInt(Math.abs(offset/60)), 2)
на правильное ... иначе вы можете получить +5,530, как в моем случае ... я не уверен, что математический пол и т. Д. Будет лучше или нет ... но это по крайней мере дает мне +0530, как и ожидалосьТы можешь использовать:
момент- часовой пояс
Обнаружение часового пояса в браузере довольно сложно сделать правильно, так как браузер предоставляет мало информации.
Момент Timezone использует
Date.getTimezoneOffset()
иDate.toString()
на несколько моментов вокруг текущего года , чтобы собрать как можно больше информации об окружающей среде браузера , как это возможно. Затем он сравнивает эту информацию со всеми загруженными данными часового пояса и возвращает наиболее близкое совпадение. В случае связи возвращается часовой пояс с городом с наибольшим населением.источник
Я написал функцию в своем проекте, которая возвращает часовой пояс в
hh:mm
формате. Я надеюсь, что это может кому-то помочь:Показать фрагмент кода
Рабочая скрипка
источник
Однострочник, который дает как смещение, так и часовой пояс, заключается в простом вызове toTimeString () для нового объекта Date. От MDN:
Суть в том, что часовой пояс не в стандартном формате IANA; это несколько более удобно для пользователя, чем формат IANA "континент / город" . Попробуйте это:
В Калифорнии сейчас
toTimeString()
возвращается,Pacific Daylight Time
а API-интерфейс Intl возвращаетсяAmerica/Los_Angeles
. В Колумбии вы получитеColombia Standard Time
, противAmerica/Bogota
.Обратите внимание, что многие другие ответы на этот вопрос пытаются получить ту же информацию, вызывая Date.toString (). Этот подход не настолько надежен, как объясняет MDN :
источник
попробуйте
getTimezoneOffset()
наDate
объекте:Этот метод возвращает смещение часового пояса в минутах, которое представляет собой разницу между GMT и местным временем в минутах.
источник
JavaScript:
источник
С moment.js :
источник
z
иzz
был объявлен устаревшим с 1.6.0, см. momentjs.com/docs/#/displaying/formatZ
иZZ
.zoneAbbr()
заменилиz
иzz
. Смотрите документацию здесьС momentjsВы можете найти текущий часовой пояс как
С dayjsВы можете найти текущий часовой пояс как
Оба API возвращают смещение utc в минутах.
источник
getTimezoneOffset()
.Часовой пояс в часах
Если вы хотите быть точным, как вы упомянули в комментарии, то вы должны попробовать вот так:
источник
Если все, что вам нужно, это сокращение часового пояса "MST" или "EST":
источник
Date.toString()
не надежно, и MDN объясняет почему. Я вставил соответствующий раздел из их документов в своем ответе .Посмотрите, этот результирующий оператор был противоположен часовому поясу. Так что примените некоторую математическую функцию, затем подтвердите число меньше или больше.
Смотрите документ MDN
источник
round
? Так и должно бытьfloor
?Пример: чт 21 июня 2018 18:12:50 GMT + 0530 (стандартное время Индии)
O / P: +0530
источник
Date.toString()
не надежно, и MDN объясняет почему. Я вставил соответствующий раздел из их документов в своем ответе .Попробуй это,
источник
Это значение с компьютера пользователя, и его можно изменить в любое время, поэтому я думаю, что это не имеет значения, я просто хочу получить приблизительное значение и затем преобразовать его в GMT на моем сервере.
Например, я из Тайваня, и он возвращает «+8» для меня.
Рабочий пример
JS
HTML
Результат
источник
На
new Date(
) вы можете получить смещение, чтобы получить имя часового пояса, которое вы можете сделать:new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
Вы получите значение
()
в конце даты, то есть название часового пояса.источник
Date.toString()
не надежно, и MDN объясняет почему. Я вставил соответствующий раздел из их документов в своем ответе . Также этот ответ был дан как минимум 3 раза.Это было бы моим решением: