не в состоянии конвертировать UTC в PST и наоборот - PullRequest
1 голос
/ 12 мая 2019

Я использую momentjs#timezone lib для преобразования в часовой пояс из UTC и наоборот.

Прямо сейчас, столкнувшись с некоторыми проблемами с преобразованием.

Hersмой код.

var myDate = "2019-05-11 18:22:40" //stored in DB utc format
myDate = timezone(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss"); //converted in America/Los_Angeles Timezone
//output : myDate = "2019-05-11 05:52:40"

Теперь, хотите снова преобразовать в UTC

myDate = timezone.tz(myDate, "America/Los_Angeles"); //added tz
myDate = timezone(myDate).tz("utc").format("YYYY-MM-DD HH:mm:ss");

, но выводится "2019-05-11 12:52:40 ", который не совпадает с вводом "2019-05-11 18:22:40".

Я что-то здесь не так делаю?

1 Ответ

1 голос
/ 12 мая 2019

Когда вы создаете момент из строки, а часовой пояс не указан, момент предполагает, что это местное время. В соответствии с моментом документы :

момент (...) - локальный режим. Предполагается неоднозначный ввод (без смещения) быть по местному времени. Однозначный вход (со смещением) настроен на локальный время.

Таким образом, «2019-05-11 18:22:40» будет считываться моментально как дата в местном часовом поясе.

Вы можете предположить, что сейчас UTC, используя moment.utc("2019-05-11 18:22:40").

Это означает изменение вашего кода следующим образом:

var myDate = "2019-05-11 18:22:40" //stored in DB utc format
myDate = timezone.utc(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss");

Но в идеале ваша база данных должна хранить / возвращать даты, используя стандарт ISO-8601 для отображения времени, чтобы часовой пояс был чистым, то есть "2019-05-11T18: 22: 40Z". «Z» обозначает UTC, поэтому момент автоматически проанализирует это как UTC, если вы позвоните moment("2019-05-11T18:22:40Z").

...