2014-09-17 1 views
3

Я использую moment.js для анализа даты. http://momentjs.com/docs/#/parsing/string-format/Почему date.js разрешает дату с одним годом цифр при использовании строгого разбора?

Это должно подтвердить и преобразовать дату в формат, необходимый для моей базы данных. В моем тестировании я столкнулся с этой датой ввода «6-4-3», которая не должна быть действительной с данным форматом.

moment('6-4-3','YYYY-MM-DD',true).isValid(); //returns true 

Итоговая дата в момент объекта "Mon Apr 03 0006 ...". Когда я вызываю isValid, он возвращает true. Я думаю, что эта дата должна считаться недействительной, потому что в ней слишком мало цифр для каждой части строки формата.

Я добавил regex.test в свой код, чтобы гарантировать, что даты имеют правильное количество цифр, но я думаю, что это должно обрабатываться по-разному в moment.js, когда строго верно.

Есть ли что-то, что мне не хватает здесь? Разве это не вопрос строгого разбора? Или есть причина, почему это предполагаемое поведение?

+2

Не удалось воспроизвести: http://jsfiddle.net/0vwmL12u/ - какая версия instant.js вы используете? – apsillers

+0

Использование версии 2.3.1 версии. – Mnebuerquo

ответ

3

Это была известная проблема для прошлых версий Moment.js: YYYY-MM-DD with 3 digit year returns true for isValid().

Это было исправлено в декабре 2013 года, и ваш код работает так, как ожидалось, с самой последней версией библиотеки. Версия 2.3.1 was released in October 2013 и не включает это исправление.

+0

Хорошо. Благодарю. Это имеет больше смысла. Я не тот парень, который управляет версиями внешних библиотек в этом проекте, поэтому я должен увидеть его об этом. – Mnebuerquo