Chrome timeZone опция на сегодняшний день.методом tolocalestring()



Недавно я обнаружил, что существует новое расширение для JavaScript. Это добавляет несколько особенностей к объекту Date в toLocaleString, toLocaleDateString и toLocaleTimeString функции. Ссылка здесь .



Меня особенно интересует опция timeZone, которая поддерживаетчасовые пояса IANA/Olson , такие как America/New_York или Europe/London. В настоящее время это поддерживается только в Google Chrome.



Предыдущий совет состоял в том, чтобы работать в JavaScript с любым другим часовым поясом, кроме UTC или ваш собственный местный часовой пояс, нужно было использовать библиотеку. Но теперь, похоже, это начинает включаться непосредственно в браузер. Итак, теперь вы можете сделать следующее:



new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

// output: "7/4/2013 5:15:45 PM"


Или:



new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
timeZoneName: "long"})

// output: "7/5/2013 9:59:52 AM GMT+12:45"


Или:



new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
timeZoneName: "short"})

// output: "4/7/2013 22:18:57 United Kingdom Time"
// (strange time zone name, but ok)


Это очень круто, но у меня есть несколько вопросов:



    Является ли это частью нового стандарта? Возможно, похоронен где-то в ECMAScript 6? Или это просто что-то обычное для Chrome?
  • Почему только Google Chrome? Поддерживается ли он куда-нибудь еще? Есть ли планы поддерживать его где-нибудь еще?

  • я проверил узел.js, который использует JavaScript runtime от Chrome, но там он не работает. А почему бы и нет?

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


  • Это ориентировано на выход, но как я буду использовать его для ввода? Есть ли способ пройти часовой пояс в конструктор для объекта Date? Я попробовал следующее:



    // parsing it with a date and time
    new Date("2013-01-01 12:34:56 America/New_York")

    // passing it as a named option
    new Date(2013,0,1,12,34,56,{timeZone:"America/New_York"})


    Ни то, ни другое не сработало. Я не смог найти ничего в спецификациях, поэтому я не думаю, что это существует (пока), но, пожалуйста, скажите мне, если я ошибаюсь.


  • Проблема, описанная вэтом посте , созданная дефектом в спецификации ECMAScript 5, все еще влияет на выходные данные, даже когда правильные данные находятся в TZDB. Как получается, что и старые, и новые реализации сосуществуют? Можно было бы подумать, что все будет по-старому, или совсем по-новому. Например, с часовым поясом моего компьютера, установленным на восточное время США:



    new Date(2004,10,7,0,0).toLocaleString("en-US",{timeZone:"America/New_York"})


    Возвращает "11/6/2004 11:00:00 PM". Он должен вернуться в полночь, так как я начал в полночь, и мой местный часовой пояс совпадает с выходным часовым поясом. Но он помещает предоставленную дату ввода в неправильную точку UTC из-за проблемы ES5.




  • Могу ли я ожидать, что по мере выпуска IANA обновлений для TZDB Google будет продвигать обновления Chrome, содержащие изменения?


685   2  

2 ответов:

Обновление

Существует довольно обширная запись об API здесь


Является ли это частью нового стандарта? Возможно, похоронен где-то в ECMAScript 6? Или это просто что-то обычное для Chrome?

Да, они являются частьюECMAScript Internationalization API . Он реализован отдельно от ECMAScript, но требование реализации ECMAScript Internationalization API состоит в том, чтобы сначала иметь правильную реализацию ECMAScript 5.1

Почему только Google Chrome? Поддерживается ли он где-нибудь еще? Есть ли планы чтобы поддержать его где-нибудь еще?

В последние годы Google Chrome в основном был первым, кто реализовал новые функции. Mozilla более консервативна, все еще обсуждая, например, следует ли реализовать атрибут download элементов a. Теперь он доступен вIE11 Beta иOpera тоже. Он будет доступен в Firefox 25 .

Я проверил узел.js, который использует среду выполнения JavaScript Chrome, но это там не работает. А почему бы и нет?

Узел.js просто использует тот же движок, который являетсяотдельным проектом от браузера Google Chrome. Движок просто реализует Ecmascript 5.1. Это узел расширения.js придется реализовать отдельно прямо сейчас. Он станет доступен в V8 в Q3 , поэтому, вероятно, немного позже вы сможете использовать его в узле.JS.

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

В спецификации нет ничего о вводе дат. Я лично не вижу, как это было бы полезно, вы делаете это неправильно, если вы не передаете метки времени UTC, потому что что-то вроде "2013-01-01 12:34:56 America/New_York" неоднозначно при переходе от DST к стандартному времени.

Проблема, описанная в этом посте, вызвана недостатком в ECMAScript Пять spec, все еще влияет на выходные данные, даже когда правильные данные находятся в TZDB.

Это проблема ввода, а не вывода. Опять же, построение даты с локальным часовым поясом, на который вы не можете повлиять или обнаружить, делает это неправильно. Используйте перегрузку конструктора timestamp или Date.UTC.

Могу ли я ожидать, что, поскольку IANA выпускает обновления для TZDB, Google будут ли нажимать обновления Chrome, содержащие изменения?

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

Является ли это частью нового стандарта? Возможно, похоронен где-то в ECMAScript 6? Или это просто что-то обычное для Chrome?

Действительно, это часть нового стандарта ECMA-402. Стандарт очень трудно читать, но есть это дружественное введение.

Почему только Google Chrome? Поддерживается ли он где-нибудь еще? Есть ли планы чтобы поддержать его где-нибудь еще?

MDN имеет список поддерживаемых браузеров . В соответствии с ошибка 853301 она будет доступна в Firefox 25.

Я проверил узел.js, который использует JavaScript runtime от Chrome, но там он не работает. А почему бы и нет?

Возможных причин много; это не до текущей базы кода, или это сделало бы узел.js больше и медленнее (предыдущая запись отслеживания ошибок от Mozilla указывает, что данные часового пояса увеличили размер загрузки Firefox на 10 % и вызвали значительное увеличение ввода-вывода при запуске браузера вверх.

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

Кажется, что он недоступен. Кроме того, Intl API primer говорит, что для поддержки абсолютно необходимы только UTC и местный часовой пояс.

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

Intl API говорит только о форматировании даты / времени, сортировке строк и форматировании чисел. Форматирование даты и времени поддерживает не только Григорианский календарь, но и многие другие виды календарей, лунные, лунно-солнечные и так далее.

Проблема, описанная в этом посте, созданная дефектом в спецификации ECMAScript 5, все еще затрагивает выходные данные, даже если правильные данные находятся в TZDB. Как это происходит что и старое и новое реализации сосуществуют? Можно было бы подумать, что все будет по-старому или по-новому. путь. Например, с часовым поясом моего компьютера, установленным на восточное время США:

Новая Дата (2004,10,7,0,0).toLocaleString ("en-US", {часовой пояс: "America / New_York"})

Возвращает "11/6/2004 11: 00: 00 PM". Он должен вернуться в полночь, так как я начал в полночь и > мой местный часовой пояс совпадает с выходным часовым поясом. Но он помещает предоставленную дату ввода в > неправильный UTC точка из-за проблемы ES5.

Причина этого заключается в том, что ES5 предписывает, чтобы ввод новой даты вычислялся с использованием текущего DST и смещения, то есть это Америка/Нью-Йорк, но с часовым поясом EDT, даже если 6 ноября не находится в EDT. Очевидно, что поскольку это так определено, то оно не может быть изменено. Однако, поскольку Chrome использует TZDB для преобразования из голого значения UTC на момент времени в значение America/New York tz, он рассматривает время как находящееся в EST.

Могу ли я ожидать, что по мере того, как IANA выпускает обновления для TZDB, Google будет продвигать обновления Chrome что содержат в себе изменения?

Я бы так и думал

Comments

    Ничего не найдено.