Как преобразовать дату, сохраненную в часовом поясе Нью-Йорка, в местный часовой пояс в JavaScript? - PullRequest
0 голосов
/ 16 апреля 2019

Я получаю дату и время в виде строки в формате часового пояса Нью-Йорка (GMT -4) со стороннего веб-сайта. Я хочу преобразовать его в местный часовой пояс, используя JavaScript. Дата и время сохраняются в следующем формате

"2019-04-15 19:09:16"

Я знаю, что могу добиться этого с помощью MomentJS, но я хочу знать, есть ли какое-либо простое решение помимо загрузки всей библиотеки для преобразования даты и времени в местный часовой пояс.

On Chrome ожидаемый результат может быть достигнут путем добавления GMT-4 в конце даты и

new Date("2019-04-15 19:09:16 GMT-4")

Но это решение не работает в Firefox из-за неверного формата.

1 Ответ

0 голосов
/ 16 апреля 2019

Если вы действительно знаете, что это смещение UTC-4, тогда вам просто нужно переформатировать строку, чтобы она соответствовала ECMAScript формату даты-времени , что является упрощением ISO 8601 Расширенный формат.

new Date("2019-04-15T19:09:16-04:00")

Однако учтите, что Нью-Йорк работает по восточному поясному времени США, что на самом деле составляет летнее время для указанной вами даты и времени. Другими словами, это не UTC-4 (EST), а скорее UTC-5 (EDT). Так что для этого примера это должно быть:

new Date("2019-04-15T19:09:16-05:00")

Но что, если вы не знаете, какое смещение для данного часового пояса в конкретную дату и время? В конце концов, часовые пояса, переходы на летнее время и связанные с ними смещения отличаются во всем мире и меняются на протяжении всей истории. Поэтому нельзя просто предполагать, что у часового пояса есть одно число, которое является его смещением. (Подробнее см. «Часовой пояс! = Смещение» в теге часового пояса вики .)

В настоящее время JavaScript не может помочь вам в этом сам по себе. Вместо этого вам нужно будет использовать библиотеку , например, такую, на которую есть ссылки .

Например, используя Luxon , вы можете сделать следующее:

luxon.DateTime.fromISO("2019-04-15T19:09:16", { zone: "America/New_York" }).toJSDate()

В будущем мы надеемся решить эту проблему на языке JavaScript с помощью временных объектов - которые все еще находятся на стадии предложения ECMAScript.

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