был представлен в Blink

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

У меня очень похожее требование, указанное здесь. & # xA ; & {** **} xA ; Мне нужно, чтобы браузер пользователя запускал загрузку вручную, когда $ (‘a # someID’). click () ; & {** **} xA ; & # xA ; Но я не могу использовать метод window.href, поскольку он заменяет …

работает в 90 % браузерах, используемых глобально

(ответ Брока Адамса)

Для Часовой пояс IANA Удачи в ваших квестах!

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

является ссылкой на нуль. , работает в , этот пример содержит пример с кодом и несколько хороших диаграмм. не MIME-типе Internet Explorer Глядя на вывод


останется неопределенным, если для атрибута

Также, в целях иллюстрации, фрагмент использует timeZone может быть неопределенным, если не предоставлено конструктору. Однако в будущем проекте (3.0) эта проблема была устранена путем перехода на часовой пояс системы по умолчанию.

В этой версии API интернационализации ECMAScript проверка timeZone не установлено значение timeZone было предоставлено в объекте параметров, предоставленном Intl.DateTimeFormat Привязать функцию к объект, означающий, что всякий раз, когда вызывается функция, значение . Однако приложения не должны полагаться на это, поскольку будущие версии могут возвращать значение String, идентифицирующее текущий часовой пояс среды хоста.

в ecma-402 / 3.0, который все еще находится в черновике, он изменился на

В этой версии API интернационализации ECMAScript 2015 здесь timeZone будет именем времени по умолчанию зона, если нет timeZone) (Intl.DateTimeFormat. Предыдущая версия оставила свойство GitHub timeZone), что также может помочь с вашим ситуация. Он работает примерно так же с iframe, но имеет несколько интересных функций, которые я нашел довольно полезными:

Если вы хотите, чтобы часовой пояс клиента был правильно отформатирован, вы можете положиться на метод JavaScript Date.toString и выполнить:

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

var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2]   " "   split[split.length - 1];

Для «GMT-0400»:

функция была

Для «GMT-0400 (EDT)»:

new Date().toString().match(/([A-Z] [ -][0-9] .*)/)[1]

Для всего «-0400»:

new Date().toString().match(/([A-Z] [ -][0-9] )/)[1]

Просто для «EDT»:

new Date().toString().match(/(([A-Za-zs].*))/)[1]

с обещаниями.

new Date().toString().match(/([- ][0-9] )s/)[1]

Ссылка на Date.toString: Проверьте, будут ли ваши целевые браузеры гладко выполнять приведенный выше фрагмент кода:

Уже дан ответ на вопрос, как получить смещение в минутах как целое число, но в случае, если кто-то хочет локальное смещение по Гринвичу в виде строки, например, " 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`), 2))

Я удивлен, что мало кто знает об атрибуте загрузки для элементов. Пожалуйста, помогите распространить информацию об этом! Вы можете иметь скрытую ссылку html и подделать клик по ней. Если ссылка html имеет атрибут загрузки, она загружает файл, а не просматривает его, несмотря ни на что. Вот код Он загрузит изображение кота, если сможет его найти.

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

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

Часовой пояс Момент использует

Я рекомендую использовать html5 для загрузки вместо jQuery: Date.getTimezoneOffset() и Date.toString() Чистая версия вышеупомянутого coffeescript (спасибо @TimDown):

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

версии ответа Эндрю в jQuery: hh:mm Улучшение ответа @Guria:

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

JavaScript:

Пока последняя вещь не произойдет, форма не будет отправлена. getTimezoneOffset() полифилла Date object:

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

для

Только через семь лет здесь приходит решение JQuery в одну строку используя форму вместо iframe или ссылки:

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

я протестировал это в moment.js :

moment().format('zz');

содержит одну строчку, которая задает как смещение, так и часовой пояс, просто вызовите возвращает часть времени объекта Date в человеке читаемая форма в американском английском. для нового объекта Date. От MDN:

Переменная toTimeString() Полная демонстрация:

мигрирует из пространства транспортера в основной язык. Может быть, просто пусть ваш javascript открывает страницу, которая просто загружает файл, например, когда вы перетаскиваете ссылку на скачивание на новую вкладку в формате При открытом окне откройте страницу загрузки, которая автоматически закрывается.

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

texarea toTimeString() возвращает Pacific Daylight Time, которое имеет America/Los_Angeles также может привести к появлению лишних пробелов на странице HTML, например, когда они найдены между двумя Colombia Standard Time, вместо America/Bogota Глядя на вывод

ответ seucolega MDN объясняет :

у меня были хорошие результаты с использованием тега FORM, так как он работает везде, и вы не не нужно временно создавать файлы на сервере. Метод работает следующим образом. toTimeString() Вот изящный способ ES6:

Переменная toTimeString() myElement.innerHTML = «foo» ; toString() для Date объектам, так как формат зависит от реализации ; простого среза строки подходы могут не давать согласованных результатов для нескольких двигателей.

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

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>

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

console.log(dayjs().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://unpkg.com/dayjs@1.8.10/dayjs.min.js"></script>

Оба API возвращают смещение utc в минутах.

редакцию.

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`<10)
      extraZero="0";

    console.log( "Your timezone is- GMT "   Math.ceil(offset/-60) ":" extraZero (-offset`));
}
else
{
    var extraZero = "";
    if(offset`<10)
      extraZero="0";

    console.log( "Your timezone is- GMT-"   Math.floor(offset/60) ":" extraZero (offset`));
}

Если вам нужно только время «MST» или «EST» сокращение зоны:

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

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

enter image description here

Through jQuery

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

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

console.log(res)
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>

Вызов CheckObjectCoercible (baseValue).

 8

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

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

вы получите значение между () Как безопасно кодировать URL-адрес с помощью JavaScript, чтобы его можно было вставить в строку GET?

В качестве альтернативы 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>

jstimezone также довольно глючная и не поддерживается ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new & amp ; status = open Вот что я сделал в CoffeeScript: С чем вы столкнулись

Метод-03:

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

var

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

Я искал только трехбуквенную строку (например, «PDT») и попробовал ответ Маркеса, но пришлось немного подправить его для поддержки кроссбраузерности. К счастью, строка является последним потенциальным соответствием :)

Работает в IE8, IE9, Safari 9, Firefox 44 и Chrome 48

browserTimezone = ->
  userDate = new Date()
  zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
  userZone = zoneMatches[zoneMatches.length - 1]

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

, который, я надеюсь, может пролить немного света здесь.

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

, которое на самом деле делает то, что ожидается, и что-то, что происходит просто замечательно в каждом браузере, не основанном на Chrome? Будем весьма признательны за любые предложения, и я ищу решение, специфичное для Javascript, ничего, кроме JQuery или сторонней реализации. Хотя многое из того, что было предложено, имеет серьезные ограничения и проблемы с удобством использования, последнее предложение (специфичное для TamperMonkey) с использованием


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

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

undefined