Raivo Laanemets. Software consultant.

Date format validation with Moment.js


Moment.js is a versatile date manipulation library for JavaScript. It supports parsing/validating/modifying/formatting operations. However, there is an important gotcha that could be missed when using the library. Its date parsing algorithm is very liberal and you might get bad surprises when using it:

> var moment = require('moment');
undefined
> moment('01.01.2001', 'DD.MM.YYYY').isValid()
true
> moment('01.01.2001junk text here', 'DD.MM.YYYY').isValid()
true
> moment('01.01.2abc', 'DD.MM.YYYY').isValid()
true
> moment('01', 'DD.MM.YYYY').isValid()
true
> moment('123', 'DD.MM.YYYY').isValid()
true
> moment('abc 123', 'DD.MM.YYYY').isValid()
true

This makes validation completely useless. The strict date parsing mode has to be enabled and it makes a lot of difference:

> moment('01.01.2001', 'DD.MM.YYYY', true).isValid()
true
> moment('01.01.2001junk text here', 'DD.MM.YYYY', true).isValid()
false
> moment('01.01.2abc', 'DD.MM.YYYY', true).isValid()
false
> moment('01', 'DD.MM.YYYY', true).isValid()
false
> moment('123', 'DD.MM.YYYY', true).isValid()
false
> moment('abc 123', 'DD.MM.YYYY', true).isValid()
false

Comments

No comments have been added so far.

Email is not displayed anywhere.
URLs (max 3) starting with http:// or https:// can be used. Use @Name to mention someone.