моменты не правильно разобрать строку - PullRequest
1 голос
/ 01 мая 2020

У меня есть эта дата:

02.05.2020 12: 33: 08

Что означает:

день 02

месяц 05

год 2020

час 12

минута 33

секунда 08

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

    moment("02.05.2020 12:33:08").day() => returned 3 ???

Почему неправильно анализируется момент js?

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Полагаю, вам нужно будет указать формат, позволяющий моментально разобрать дату.

См. Документы здесь: Строка анализа момента + формат .

Как только вы это сделаете, вы должны получить правильный результат:

const dateFormat = "DD.MM.YYYY HH:mm:ss";
const parsedDate = moment("02.05.2020 12:33:08", dateFormat);
console.log("Day of week:", parsedDate.day());
console.log("Day of month:", parsedDate.date());
console.log("Full date:", parsedDate.format("dddd, MMMM Do YYYY, HH:mm:ss"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
1 голос
/ 01 мая 2020

Есть две потенциальные проблемы.

Во-первых, если вы запускаете только разбор самостоятельно (как в командной строке REPL , вы получите следующее предупреждение.

Предупреждение об устаревании: предоставленное значение не соответствует распознанному формату RFC2822 или ISO. Конструкция момента возвращается к js Date (), что не является надежным во всех браузерах и версиях. Неформатные форматы даты RFC2822 / ISO обескуражен и будет удален в следующем основном выпуске.

Так что, возможно, это не лучшая строка для анализа, в зависимости от вашей версии.

Но также, .day() дает вам индекс дня недели. 5 февраля была средой, и, поскольку Момент считает дни с воскресенья, это почти наверняка правильный ответ. Если вы хотите день месяца (5), вместо этого .date().

На самом деле, существует потенциальная проблема третья , в которой "02" и "05" создают неоднозначную дату, так что вы, вероятно, захотите кормить момент разбором строка, второй параметр, который выглядит примерно так: "MM.DD.YYYY hh:mm:ss".

...