Получение смещения часового пояса клиента в JavaScript

Как я могу получить информацию о часовом поясе посетителя? Мне нужен часовой пояс, а также часы смещения по часовой стрелке.

Ответы

Ответ 1

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

Ответ 2

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

Чтобы получить системный часовой пояс IANA в JavaScript, вам следует использовать

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

Ответ 3

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

Если вы хотите, чтобы временная зона клиента была хорошо отформатирована, вы можете положиться на метод JavaScript Date.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]

Ссылка Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString

Ответ 4

Уже ответили, как получить смещение в минутах как целое число, но в случае, если кто-то хочет, чтобы локальное смещение по часовой стрелке как строка, например. "+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))

Ответ 5

Вы можете использовать:

момент- часовой пояс

<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>

// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();

Обнаружение часового пояса браузера довольно сложно получить, поскольку информация, предоставляемая браузером, немного информации.

Moment Timezone использует Date.getTimezoneOffset() и Date.toString() в течение нескольких минут вокруг текущего года, чтобы собрать как можно больше информации о среде браузера. Затем он сравнивает эту информацию со всеми данными часового пояса и возвращает самое близкое соответствие. В случае связей возвращается часовой пояс с городом с наибольшей численностью населения.

console.log(moment.tz.guess()); // America/Chicago

Ответ 6

Я написал функцию в моем проекте, которая возвращает часовой пояс в формате hh:mm. Надеюсь, это может помочь кому-то:

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:00

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);
}


// See output
document.write(getTimeZone());

Ответ 7

попробуйте getTimezoneOffset() объекта Date:

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

Этот метод возвращает смещение часового пояса в минутах, что является разницей между GMT и местным временем в минутах.

Ответ 8

JavaScript:

var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);

Ответ 9

Однострочник, который задает как смещение, так и часовой пояс, просто вызывает toTimeString() для нового объекта Date. Из MDN:

Метод toTimeString() возвращает часть времени объекта Date в удобочитаемой форме на американском английском языке.

Суть в том, что часовой пояс не в стандартном формате IANA; это несколько более удобно для пользователя, чем формат IANA "континент/город". Попробуйте:

console.log(new Date().toTimeString().slice(9));
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
console.log(new Date().getTimezoneOffset() / -60);

Ответ 10

С moment.js:

moment().format('zz');

Ответ 11

С помощью вы можете найти текущий часовой пояс как

console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

Ответ 12

Часовой пояс в часах -

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);

Ответ 13

Если вам понадобится аббревиатура часового пояса "MST" или "EST":

function getTimeZone(){
    var now = new Date().toString();
    var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
    return timeZone;
}

Ответ 14

См. этот результирующий оператор был противоположным часовому поясу. Используйте некоторую математическую функцию, затем проверяйте число меньше или больше.

введите описание изображения здесь

См. документ MDN

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

var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;

console.log(res)

Ответ 15

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

Ответ 16

Это значение от пользовательской машины, и его можно изменить в любое время, поэтому я думаю, что это не имеет значения, я просто хочу получить приблизительное значение и затем преобразовать его в 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

Ответ 17

В new Date() вы можете получить смещение, чтобы получить имя часового пояса, которое вы можете сделать:

new Date().toString().replace(/(.*\((.*)\).*)/, '$2');

вы получаете значение между () в конце даты, то есть имя часового пояса.

Ответ 18

Попробуй это,

new Date().toString().split("GMT")[1].split(" (")[0]

Ответ 19

В качестве альтернативы new Date().getTimezoneOffset() и moment().format('zz') вы также можете использовать :

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>

Ответ 20

Используйте это для преобразования OffSet в postive:

var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);

Ответ 21

Я искал только 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

Ответ 22

Вы просто хотите включить moment.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>

Ответ 23

Это очень хорошая работа для меня:

// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;

Ответ 24

вы можете просто попробовать это. он вернет вам текущее время машины

var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())

Ответ 25

Это выполнит задание.


var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);

Thu May 25 2017 21:35:14 GMT+0300 (IDT)

undefined