First things first, the
DateTime instead but that's nowhere near the biggest issue.
When dealing with dates there are a number of things to remember.
Months are zero indexed, so January in month 0, not month 1. Similarly, month 11 is December, not November.
var date = new Date(2015, 1, 1); // Sun Feb 01 2015 00:00:00 GMT+0000 (GMT Standard Time)
When trying to create a date by passing a string intothe
new Date("02/03/2015") // Tue Feb 03 2015 00:00:00 GMT+0000 (GMT Standard Time)
This means that a European format of dd/mm/yy will result in either an unexpected or invalid date
new Date("12/08/2015") // Tue Dec 08 2015 00:00:00 GMT+0000 (GMT Standard Time) - not the expected 12th of August new Date("13/08/2015") // Invalid Date
Date object is that the
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]) constructor will overflow any entires that is outside of it's logical range. This can make date validation unusual, for instance if a user enters a date of 31st February, on a non-leap year it will return the 3rd of March (2nd of March on a leap year)
new Date(2015, 02, 31) // Tue Mar 31 2015 00:00:00 GMT+0100 (GMT Daylight Time)
Strangely, this is actually by design, as mentioned here
Taken to an extreme, this means that you can create a date object representing the 1st of Januray 2016 as the following
new Date(2015, 0, 366) // Fri Jan 01 2016 00:00:00 GMT+0000 (GMT Standard Time) // Note the zero indexed month to represent January
DateTime you may run into surprises.