Недавно я обнаружил, что есть новое расширение 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? Поддерживается ли она где-нибудь еще? Есть ли планы поддержать его где-нибудь еще?
- Я проверил node.js, который использует время выполнения JavaScript JavaScript, но он там не работает. Почему бы и нет?
- Доступны ли данные часового пояса любым другим способом, чем перечисленные мной функции? Если доступно только при форматировании строк, выполнение любых вычислений на основе результатов может быть затруднено.
-
Это сфокусировано на выходе, но как я буду использовать его для ввода? Есть ли способ передать часовой пояс в конструкторе объекту
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, содержащие изменения?