dayjs () сообщает мне недопустимую дату для этой строки даты

#javascript #typescript #vue.js #date #dayjs

#javascript #typescript #vue.js #Дата #dayjs

Вопрос:

DayJs

Используйте его в браузере, если это имеет значение (firefox Vue typescript).

Это моя строка даты

2021-02-05 12:00

Это беспокоит AM / PM в моем коде:

 const dateObj: any = dayjs('2021-02-05 12:00 AM').format('YYYY-MM-DD hh:mm A');
 

Вывод dateObj всегда «Недопустимая дата». Если я удалю «AM» из строки, он будет правильно проанализирован. Если я попробую этот онлайн-тестер для того же кода, результат будет

NaN-NaN-NaN NaN:NaN PM

Как и в моей среде разработки, если я удалю AM, все в порядке.

Есть идеи?

РЕДАКТИРОВАТЬ: работает в Chrome, а не в Firefox…

Комментарии:

1. Я получаю 2021-02-05 12:00 AM тестер, на который вы ссылались. Я использовал dayjs('2021-02-05 12:00 AM').format('YYYY-MM-DD hh:mm A') .

2. @Ouroborus Странно, вот скриншот моего результата: i.imgur.com/WrtSk9Z.png РЕДАКТИРОВАТЬ: Кажется, работает на Chrome, а не на FF???

Ответ №1:

Проблема в Firefox

Если вы внимательно посмотрите на реализацию, вы увидите, что приведенная выше строка дня проходит через Day конструктор : new Day('2021-02-05 12:00 AM') . К сожалению, FF не поддерживает этот формат строки поддержки этого дня, но Chrome поддерживает.

Наилучший подход

В документации dayjs упоминается:

Для получения согласованных результатов анализа чего-либо, кроме строк ISO 8601, вы должны использовать String Format .

Если вы все еще хотите использовать вышеуказанный формат, вам придется использовать плагин, как указано здесь

В принципе, вы должны изменить, как показано ниже, для работы во всех браузерах:

 import customParseFormat from 'dayjs/plugin/customParseFormat'
import dayjs from "dayjs"

dayjs.extend(customParseFormat)

const yourDate = dayjs('2021-02-05 12:00 AM', 'YYYY-MM-DD HH:mm A')