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)
isValid() is the method available on moment which tells if the date is valid or not. MomentJS also provides many parsing flags which can be used to check for date validation.
Testing for Date Legality If you only want to know whether a date string was successfully converted into a proper date object, you can invoke the isValid() method on the moment instance variable: var aDate = moment(dateElt. value, 'YYYY-MM-DD', true); var isValid = aDate. isValid();
MomentJs recently announced that the library is now deprecated. This is a big deal for the javascript community who actively downloads moment almost 15 million times a week.
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
create an Issue on the Git Repository from momentjs https://github.com/moment/moment/ the best way to handle this error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With