Как я могу получить название часового пояса в JavaScript? - PullRequest
59 голосов
/ 19 марта 2012

Я знаю, как получить смещение часового пояса, но мне нужна способность обнаруживать что-то вроде «Америка / Нью-Йорк». Это вообще возможно из JavaScript или это то, что я собираюсь угадать, основываясь на смещении?

Ответы [ 6 ]

119 голосов
/ 05 июля 2017

Интерфейс Интернационализация поддерживает получение часового пояса пользователя и поддерживается во всех текущих браузерах.

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

Имейте в виду, что в некоторых старых версиях браузера, поддерживающих API интернационализации, свойство timeZone имеет значение undefined, а не строку часового пояса пользователя.Насколько я могу судить, на момент написания (июль 2017 года) все текущие браузеры, кроме IE11 , будут возвращать часовой пояс пользователя в виде строки.

6 голосов
/ 17 апреля 2015

Вы можете использовать этот скрипт. http://pellepim.bitbucket.org/jstz/

Хранилище вилок или клонов здесь. https://bitbucket.org/pellepim/jstimezonedetect

Как только вы включите скрипт, вы можете получить список часовых поясов в переменной - jstz.olson.timezones.

И следующий код используется для определения часового пояса браузера клиента.

var tz = jstz.determine();
tz.name();

Наслаждайтесь JSTZ!

2 голосов
/ 13 апреля 2015

Вы можете просто написать свой собственный код, используя таблицу соответствия здесь: http://www.timeanddate.com/time/zones/

или используйте библиотеку моментов и часовых поясов: http://momentjs.com/timezone/docs/

См. zone.name; // America/Los_Angeles

или эта библиотека: https://github.com/Canop/tzdetect.js

1 голос
/ 02 апреля 2016

Попробуйте этот код ссылаться от здесь

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    alert(timezone);
});
</script>
0 голосов
/ 07 июня 2019

Большинство проголосовавших ответ , вероятно, лучший способ получить часовой пояс, однако, Intl.DateTimeFormat().resolvedOptions().timeZone возвращает имя часового пояса IANA по определению, которое на английском языке.

Если вам нужно имя часового пояса на языке текущего пользователя, вы можете проанализировать его из строкового представления Date следующим образом:

function getTimezoneName() {
  const today = new Date();
  const short = today.toLocaleDateString(undefined);
  const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });

  // Trying to remove date from the string in a locale-agnostic way
  const shortIndex = full.indexOf(short);
  if (shortIndex >= 0) {
    const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
    
    // by this time `trimmed` should be the timezone's name with some punctuation -
    // trim it from both sides
    return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');

  } else {
    // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
    return full;
  }
}

console.log(getTimezoneName());

Протестировано в Chrome и Firefox.

Конечно, это не будет работать так, как задумано в некоторых средах. Например, node.js возвращает смещение GMT ​​(например, GMT+07:00) вместо имени. Но я думаю, что это все еще читается как запасной вариант.

P.S. Не будет работать в IE11, как и решение Intl....

0 голосов
/ 17 апреля 2015

В javascript метод Date.getTimezoneOffset () возвращает смещение часового пояса от UTC в минутах для текущей локали.

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Moment'timezone будет полезным инструментом.http://momentjs.com/timezone/

Конвертировать даты между часовыми поясами

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...