Функция moment.js возвращает NaN для формата даты "dddd Do MMM" в узле - PullRequest
0 голосов
/ 10 января 2019

Я наткнулся на интересную проблему с moment.js в среде node.js. По сути, я пытаюсь получить время из эпохи для формата даты «Пятница 24 августа», но в результате я получаю NaN. Вот мой код node.js:

const moment = require("moment");
console.log(moment("Friday 24th Aug", "dddd Do MMM").valueOf());
moment.js version: 2.23.0
nodejs version: v8.11.3
OS: Linux 16.04.1-Ubuntu
Хотя, если я попробую ту же консольную строку в браузере, работает нормально. Кто-нибудь сталкивался с чем-то подобным?

РЕДАКТИРОВАТЬ: Извинения за ссылку, я использовал уже созданный jsfiddle, у которого есть moment.js версия: 2.2.1. Похоже, что он «работал» в этой версии, но теперь он изменился: http://jsfiddle.net/fy8w62on/ (moment.js версия 2.2.1)

Ответы [ 2 ]

0 голосов
/ 10 января 2019

valueOf() дает NaN, потому что ваш моментальный объект (moment("Friday 24th Aug", "dddd Do MMM") недействителен .

Обратите внимание, что, как По умолчанию раздел документов:

Вы можете создать моментный объект, определяющий только некоторые единицы измерения, а остальные будут иметь значение по умолчанию на текущий день, месяц или год или 0 для часов, минут, секунд и миллисекунд.

Поэтому момент пытается создать экземпляр, представляющий 2019-08-24 (используя текущий год), но он создает Invalid Date, потому что 2019-08-24 - суббота (при использовании по умолчанию английский язык США), а не пятница ( как уже было сказано другими в комментариях).

Используя parsingFlags, вы увидите, что weekdayMismatch установлено на true

var m =  moment("Friday 24th Aug", "dddd Do MMM");
console.log(m.valueOf());      // NaN
console.log(m.format());       // Invalid date
console.log(m.parsingFlags()); // Object with "weekdayMismatch": true
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
0 голосов
/ 10 января 2019

Friday 24th Aug не содержит год, поэтому момент должен угадать, какой это год, и использует текущий год для предположения.

Если это 2018 во время запуска кода, то valueOf не вернет NaN.

Но это 2019 год, поэтому Friday 24th Aug из 2019 года недействителен.

...