23 ответов:
var offset = new Date().getTimezoneOffset(); console.log(offset);смещение часового пояса-это разница в минутах между UTC и местным временем. Обратите внимание, что это означает, что смещение является положительным, если локальный часовой пояс находится позади UTC и отрицательным, если он впереди. Например, если ваш часовой пояс UTC+10 (Australian Eastern Standard Time), -600 будет возвращено. Переход на летнее время не позволяет этому значению быть постоянным даже для данной локали
обратите внимание, что не все часовые пояса смещены на целые часы: например, Ньюфаундленд-это UTC минус 3h 30m (оставляя летнее время вне уравнения).
использование смещения для расчета часового пояса является неправильным подходом, и вы всегда будете сталкиваться с проблемами. Часовые пояса и правила перехода на летнее время может меняться несколько раз в течение года, и это трудно идти в ногу с изменениями.
чтобы получить правильный часовой пояс в JavaScript, вы должны использовать
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)к сожалению, на момент написания этого, он еще не получил широкой поддержки.
Я знаю, что он работает правильно, по крайней мере, в Хром.есма-402/1.0 говорит, что
timeZoneможет быть неопределенным, если не предоставлено конструктору. Тем не менее, будущий проект (3.0) исправил эту проблему, изменив на системный часовой пояс по умолчанию.в этой версии API интернационализации ECMAScript
timeZoneсвойство останется неопределенным, если нетtimeZoneсобственность была предоставлено в объекте options, предоставленномIntl.DateTimeFormatконструктор. Однако, приложения не должны полагаться на это, как будущее версии могут возвращать строковое значение, идентифицирующее среду хоста вместо этого текущий часовой пояс.в ecma-402/3. 0, который все еще находится в проекте, он изменился на
в этой версии ECMAScript 2015 Internationalization API,
timeZoneсвойство будет именем часового пояса по умолчанию, если нетtimeZoneсвойство было предоставлено в объекте options, предоставленномIntl.DateTimeFormatконструктор. Предыдущая версия оставилаtimeZoneсвойство не определено в этом случае.поэтому перед его использованием проверьте текущую поддержку в браузерах например at:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions
Я понимаю, что этот ответ немного не по теме, но я думаю, что многие из нас ищут ответ также хотел отформатировать часовой пояс для отображения и, возможно, получить аббревиатуру зоны тоже. Так что вот оно...
если вы хотите, чтобы часовой пояс клиента был хорошо отформатирован, вы можете полагаться на дату JavaScript.toString метод и сделать:
var split = new Date().toString().split(" "); var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];Это даст вам " GMT-0400 (EST)", например, включая минуты часового пояса, когда это применимо.
кроме того, с регулярное выражение Вы можете извлечь любую нужную часть:
для " GMT-0400 (EDT)":
new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]для "GMT-0400":
new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]только для "EDT":
new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]просто "-0400":
new Date().toString().match(/([-\+][0-9]+)\s/)[1]дата.ссылка на строку:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
уже ответили, Как получить смещение в минутах как целое число, но в случае, если кто-то хочет локальное смещение GMT в виде строки, например
"+1130":function pad(number, length){ var str = "" + number while (str.length < length) { str = '0'+str } return str } var offset = new Date().getTimezoneOffset() offset = ((offset<0? '+':'-')+ // Note the reversed sign! pad(parseInt(Math.abs(offset/60)), 2)+ pad(Math.abs(offset%60), 2))
вы можете использовать:
время-часовой пояс
<script src="moment.js"></script> <script src="moment-timezone-with-data.js"></script> // retrieve timezone by name (i.e. "America/Chicago") moment.tz.guess();обнаружение часового пояса браузера довольно сложно получить право, так как существует мало информации, предоставляемой браузером.
момент часовой пояс использует
Date.getTimezoneOffset()иDate.toString()на несколько моментов вокруг текущего года, чтобы собрать как можно больше информации о среде браузера, как это возможно. Затем он сравнивает эту информацию со всеми загруженными данными часового пояса и возвращает ближайшее совпадение. В случае связей, возвращается часовой пояс с городом с наибольшим населением.console.log(moment.tz.guess()); // America/Chicago
Я написал функцию в моем проекте, которая возвращает часовой пояс в . Я надеюсь, что это может помочь кому-то:
function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); }
// Outputs: +5:00function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); } // See output document.write(getTimeZone());
JavaScript:
var d = new Date(); var n = d.getTimezoneOffset(); var timezone = n / -60; console.log(timezone);
С момент.js:
moment().format('zz');
Если все, что вам нужно, это аббревиатура часового пояса "MST" или "EST":
function getTimeZone(){ var now = new Date().toString(); var timeZone = now.replace(/.*[(](.*)[)].*/,'');//extracts the content between parenthesis return timeZone; }
часовой пояс в часах-
var offset = new Date().getTimezoneOffset(); if(offset<0) console.log( "Your timezone is- GMT+" + (offset/-60)); else console.log( "Your timezone is- GMT-" + offset/60);Если вы хотите быть точным, как вы упомянули в комментарии, то вы должны попробовать, как это-
var offset = new Date().getTimezoneOffset(); if(offset<0) { var extraZero = ""; if(-offset%60<10) extraZero="0"; console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60)); } else { var extraZero = ""; if(offset%60<10) extraZero="0"; console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60)); }
function getLocalTimeZone() { var dd = new Date(); var ddStr = dd.toString(); var ddArr = ddStr.split(' '); var tmznSTr = ddArr[5]; tmznSTr = tmznSTr.substring(3, tmznSTr.length); return tmznSTr; }пример: Чт 21 июня 2018 18: 12: 50 GMT+0530 (стандартное время Индии)
O / P: +0530
Это значение с компьютера пользователя, и его можно изменить в любое время, поэтому я думаю, что это не имеет значения, я просто хочу получить приблизительное значение, а затем преобразовать его в GMT на моем сервере.
например, я из Тайваня, и он возвращает "+8" для меня.
JS
function timezone() { var offset = new Date().getTimezoneOffset(); var minutes = Math.abs(offset); var hours = Math.floor(minutes / 60); var prefix = offset < 0 ? "+" : "-"; return prefix+hours; } $('#result').html(timezone());HTML
<div id="result"></div>результат
+8
см. этот результирующий оператор был противоположен часовому поясу. поэтому примените некоторую математическую функцию, а затем проверьте число меньше или больше.
var a = new Date().getTimezoneOffset(); var res = -Math.round(a/60)+':'+-(a%60); res = res < 0 ?res : '+'+res; console.log(res)
на
new Date() вы можете получить смещение, чтобы получить имя часового пояса вы можете сделать:
new Date().toString().replace(/(.*\((.*)\).*)/, '');вы получаете значение между
()в конце даты, это имя часового пояса.
как альтернатива
new Date().getTimezoneOffset()иmoment().format('zz'), вы также можете использовать momentjs:var offset = moment.parseZone(Date.now()).utcOffset() / 60 console.log(offset);<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>jstimezone также довольно глючит и не поддерживается (https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open)
использовать это, чтобы преобразовать смещение положительных:
var offset = new Date().getTimezoneOffset(); console.log(offset); this.timeOffSet = offset + (-2*offset); console.log(this.timeOffSet);
Я искал только строку из 3 букв (например, "PDT") и попытался ответить Маркесу, но ему пришлось немного настроить его для поддержки кросс-браузера. К счастью, строка является последним потенциальным совпадением :)
вот что я сделал, в CoffeeScript:
browserTimezone = -> userDate = new Date() zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g) userZone = zoneMatches[zoneMatches.length - 1]работает в IE8, IE9, Safari 9, Firefox 44 и Chrome 48
вы просто чтобы включить момент.js и jstz.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>и после этого
<script> $(function(){ var currentTimezone = jstz.determine(); var timezone = currentTimezone.name(); alert(timezone); }); </script>
Это очень хорошая работа для меня:
// Translation to offset in Unix Timestamp let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
вы можете просто попробовать это. он вернет вам текущее машинное время
var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())
это сделает работу.
var time = new Date(), timestamp = Date(1000 + time.getTime()); console.log(timestamp);
Thu May 25 2017 21:35:14 GMT+0300 (IDT)неопределено

Comments