Going on a date with javascript
First things first, the Date
object in javascript is misnamed, it represents a date and a time. It should be DateTime
instead but that's nowhere near the biggest issue.
</pedantry>
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 Date
contructor, javascript will assume you are using the American format of mm/dd/yy
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
One of the more unusual features of the javascript 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
Dates in javascript are tricky and if you are used to a more structured object like C#'s DateTime
you may run into surprises.