В JavaScript есть ли способ преобразовать дату в часовой пояс без использования toLocaleString? - PullRequest
2 голосов
/ 26 мая 2020

Я обнаружил, что toLocaleString может эффективно переводить время в другой часовой пояс, как уже обсуждалось на этом вопросе . Например, чтобы напечатать время в Нью-Йорке:

console.log(new Date().toLocaleString("en-US", {timeZone: "America/New_York"}))
"5/26/2020, 1:27:13 PM"

Отлично; этот код дает мне время в Нью-Йорке, но только в формате строка . Если я хочу сделать что-то программное c на основе часов, мне нужно будет проанализировать эту строку.

Есть ли способ сгенерировать объект даты с указанным c часовым поясом без принуждения это в строку? Например, мне нужна эта воображаемая функция:

const newYork = new Date().toTimezone('America/New_York')
console.log(newYork.getHours(), newYork.getMinutes())
13 27     // <--- 13:27 (1:27pm) in New York, not the browser's timezone

Возможно ли это в JavaScript?

1 Ответ

4 голосов
/ 26 мая 2020

К сожалению, нет - это невозможно с объектом Date.

Для этого вы можете использовать библиотеку, такую ​​как Luxon , но внутренне она действительно манипулирует строковым результатом из toLocaleString для достижения sh этого.

const newYork = luxon.DateTime.local().setZone('America/New_York');
console.log(newYork.hour, newYork.minute); // just an example, like in your question

Предложение ECMAScript Temporal работает над улучшением таких вещей в будущем.

...