58

I need to validate the date from the user and check if it is in a particular format. If yes, then it will be accepted else it will not be. I am looking for sort of

value.match("regular expression") 

The above works fine if, I have to choose from few formats. So, I came across this moment.js and interested in knowing how to use isSame(). I tried implementing it but unsuccessful. Like :

var x=moment("MM/DD/YYYY") ;
x.isSame("28-02-1999");  // am getting false which is right
var x=moment("28-02-1999","DD-MM-YYYY") ;
x.isSame("28-02-1999");  // am getting false which is wrong

So, please help in that. Thanks

user3050590
  • 1,656
  • 4
  • 21
  • 40
  • Though I have resolved my problem but still I need more information about the above function. I have solved it with reference to this question http://stackoverflow.com/questions/28227862/how-to-test-a-string-is-valid-date-or-not-using-moment – user3050590 Feb 05 '15 at 04:59

1 Answers1

141

Docs - Is Same

Check if a moment is the same as another moment.

moment('2010-10-20').isSame('2010-10-20'); // true

If you want to limit the granularity to a unit other than milliseconds, pass the units as the second parameter.

moment('2010-10-20').isSame('2009-12-31', 'year'); // false
moment('2010-10-20').isSame('2010-01-01', 'year'); // true
moment('2010-10-20').isSame('2010-12-31', 'year'); // true
moment('2010-10-20').isSame('2011-01-01', 'year'); // false

Your code

var x=moment("28-02-1999","DD-MM-YYYY"); // working
x.isSame("28-02-1999"); // comparing x to an unrecognizable string

If you try moment("28-02-1999"), you get an invalid date. So comparing x to an invalid date string returns false.

To fix it, either use the default date format (ISO 8601):

var x = moment("28-02-1999","DD-MM-YYYY");
x.isSame("1999-02-28"); // YYYY-MM-DD

Or pass isSame a moment object.

var x = moment("28-02-1999","DD-MM-YYYY");
x.isSame( moment("28-02-1999","DD-MM-YYYY") );
DanielST
  • 13,783
  • 7
  • 42
  • 65
  • Some useful info i found on the doc. I was looking for something that matches string in the format as 'DD/MM/YYYY', so if you say the unit as 'day' it will do the work. From Moment Doc: When including a second parameter, it will match all units equal or larger. Passing in month will check month and year. Passing in day will check day, month, and year. – Niraj Sep 22 '22 at 03:16