Обнаружение сокращения часового пояса, используя JavaScript - PullRequest
38 голосов
/ 23 декабря 2009

Мне нужен способ определения часового пояса данного объекта даты. Я не хочу смещения, и при этом я не хочу полное название часового пояса. Мне нужно получить сокращение часового пояса. Например, GMT, UTC, PST, MST, CST, EST и т.д ...

Возможно ли это? Самое близкое, что я получил, - это анализ результата date.toString (), но даже это не даст мне сокращения. Это дает мне длинное имя часового пояса.

Ответы [ 14 ]

0 голосов
/ 09 марта 2017
try {
    result = /.*\s(.+)/.exec(date.toLocaleDateString(navigator.language, {timeZoneName:'short' }))[1];
} catch(e) {
    result = (new Date()).toTimeString().match(new RegExp("[A-Z](?!.*[\(])","g")).join('');
}

console.log(result);
0 голосов
/ 23 декабря 2016

Вот JavaScript-самообновляемый 12-часовой формат отображения даты / времени, который не совсем отвечает на вопрос, однако может помочь другим, поскольку он связан и основан на решении Стивена Дюмонта и MDN ссылка. Школы W3 имели очень полезное руководство, и обновления в режиме реального времени не требуют обновления страницы.

Работают тесты с последними версиями настольных FireFox, Chrome, Opera и Internet Explorer 11. Час «2 цифры» появляется только в качестве префикса ноль для отдельных значений в IE, однако минуты возвращают двузначное значение надежно для всех браузеров. Тесты с прекращенным Windows Safari работают, хотя 12-часовой формат игнорируется, а секунды не скрываются.

Функция включает в себя местный часовой пояс, а также настраиваемые параметры для резервных языков, отображения дня и даты и формата 12/24 часа. Дата и время были разделены для добавления разделяющей строки «at». Установка только 'toLocaleTimeString' с опциями выбора также вернет дату и время. На страницы MDN можно ссылаться для параметров и значений.

<!--
function dateTimeClock() {
  var date = new Date();
  document.getElementById('timedate').innerHTML = date.toLocaleDateString(['en-us', 'en-GB'], {
      weekday: 'long',
      month: 'long',
      day: '2-digit',
      year: 'numeric'
    }) + ' at ' +
    date.toLocaleTimeString(['en-us', 'en-GB'], {
      hour12: 'true',
      hour: '2-digit',
      minute: '2-digit',
      timeZoneName: 'short'
    });
  var t = setTimeout(dateTimeClock, 500);
}

function start() {
  dateTimeClock();
}
window.onload = start;
//-->
<div id="timedate"></div>
0 голосов
/ 03 ноября 2015

Невозможно с ванильным JavaScript. Браузеры не согласны возвращать строки часового пояса. Некоторые возвращают смещения, такие как +0700, в то время как другие возвращают PST.

Это не согласовано и не надежно, поэтому вам нужен сторонний скрипт, такой как moment.jsmoment-timezone.js), или создать собственную хэш-таблицу для преобразования между смещениями и сокращениями часовых поясов.

0 голосов
/ 24 декабря 2009

Попробуйте Google Closure Class goog.i18n.DateTimeSymbols и их классы, связанные с локалью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...