moment.js validating invalid date “2013-10-311”

2019-04-04 00:40发布

Running moment.js, 2.2.1

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

... returns true, and the moment object would be set to 31 October 2010. The parser seems to strip extraneous characters of any sort:

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

Curiouser, if you add additional format choices, then the "stripping" becomes limited to only one character! (Shouldn't the format strings tests be ORed?)

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 (!!!)

Is this behaviour by design? I'm not getting why.

EDIT: A commenter found another case where extra characters beyond one are, indeed, stripped:

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

Here is is in action: http://jsfiddle.net/grahampcharles/r42jg/6/ (updated with new case)

3条回答
女痞
2楼-- · 2019-04-04 01:16

If the user is not selecting any date, then it is showing as invalid date. It is wrong, it should show no date or date not selected. To change that in moment.js you can change that to nodate instead of invalid date.

查看更多
3楼-- · 2019-04-04 01:33

Moment.js version 2.3.0 added strict parsing.

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
查看更多
女痞
4楼-- · 2019-04-04 01:36

create an Issue on the Git Repository from momentjs https://github.com/moment/moment/ the best way to handle this error.

查看更多
登录 后发表回答