Подтвердить что ты не робот

Moment.js, подтверждающий недействительную дату "2013-10-311"

Запуск момента .js, 2.2.1

moment("2010-10-319", ["YYYY-MM-DD"]).isValid()

... возвращает true, а объект момента будет установлен до 31 октября 2010 года. Парсер, кажется, разделяет посторонние символы любого типа:

moment("2010-10-31a", ["YYYY-MM-DD"]).isValid(); // true

Любопытно, если вы добавите дополнительные варианты выбора формата, тогда "зачистка" будет ограничена только одним символом! (Не следует ли проверять строковые строки формата?)

moment("2010-10-319", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true
moment("2010-10-3199", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // false (!!!)

Это поведение по дизайну? Я не понимаю, почему.

EDIT: комментатор обнаружил другой случай, когда лишние символы за пределами, действительно, лишены:

moment("2010-10-319qr", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true (!)

Вот что находится в действии: http://jsfiddle.net/grahampcharles/r42jg/6/ (обновлено в новом случае)

4b9b3361

Ответ 1

создать проблему в репозитории Git from momentjs https://github.com/moment/moment/ лучший способ справиться с этой ошибкой.

Ответ 2

Moment.js version 2.3.0 добавлен строгий разбор.

moment("2010-10-319", ["YYYY-MM-DD"]).isValid();       // true
moment("2010-10-319", ["YYYY-MM-DD"], true).isValid(); // false

moment("2010-10-31a", ["YYYY-MM-DD"]).isValid();       // true
moment("2010-10-31a", ["YYYY-MM-DD"], true).isValid(); // false

var formats = ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"];

moment("2010-10-319",  formats).isValid(); // true
moment("2010-10-3199", formats).isValid(); // false

moment("2010-10-319",  formats, true).isValid(); // false
moment("2010-10-3199", formats, true).isValid(); // false

moment("2010-10-319qr", formats).isValid();       // true
moment("2010-10-319qr", formats, true).isValid(); // false

Ответ 3

Если пользователь не выбирает какую-либо дату, он отображается как недопустимая дата. Это неправильно, он не должен показывать дату или дату, которые не выбраны. Чтобы изменить это в moment.js, вы можете изменить это, чтобы указывать вместо недопустимой даты.