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')

Другие вопросы по тегам