day.js не конвертирует UTC в местное время
Я бегу в проблему, пытаясь преобразовать momentjs к day.js.
На данный момент я преобразовал utc в местное время через moment.utc('2020-04-22T14:56:09.388842').local().format('MM/DD/YY h:mm A')
который возвращается 04/22/20 9:56 AM
.
Когда я конвертирую с помощью day.js черезdayjs.utc('2020-04-22T14:56:09.388842').local().format('MM/DD/YY h:mm A')
, Я получил 04/22/20 2:56 PM
; Я импортирую плагин utc.
Я поместил пример в jsfiddle здесь: https://jsfiddle.net/obdg74sp/2/
Кто-нибудь сталкивался с этой проблемой, и если да, то как вы ее решили?
Спасибо.
2 ответа
И Moment, и Day.js поддерживают только миллисекундную точность, однако они различаются по поведению, когда для синтаксического анализа передается более трех десятичных знаков.
- Moment будет игнорировать лишние десятичные дроби, но по-прежнему будет использовать собственную логику синтаксического анализа.
- Day.js возвращается к
Date.parse
функция
В последнем случае нет информации о UTC, поэтому вы получаете местное время, несмотря на то, что оно передается через dayjs.utc
функция.
Это было поднято в выпуске Day.js № 544 и закрыто владельцем этой библиотеки без каких-либо изменений.
Вы можете обойти это, обрезая строку, чтобы удалить лишние десятичные дроби.
dayjs.utc('2020-04-22T14:56:09.388842'.substring(0, 23))
Затем он правильно проанализирует UTC, и остальная часть вашей логики будет работать соответственно.
(В качестве альтернативы вы можете добавить Z
к строке)
Я использовал:
dayjs(date).utc('z').local().tz(ianaCode).format('ddd, MMM D, H:mm z')
Пример:
dayjs('2021-06-08T24:00:00').utc('z').local().tz('America/Detroit').format('ddd, MMM D, H:mm z')