When it comes to programming, working with dates can be tricky. Luckily however most languages have done the hard work already and come with some kind of built-in date functionality to assist us. JavaScript inparticular has lots of useful functions to aid in getting, setting and outputting dates.
The JavaScript Date Object
To begin working with dates in JavaScript the first thing you need to do is initialise a date object like so:
var d = new Date();
That’s fine if we want get the current date and time, however it doesn’t help us much if we are planning on working with a date in the past or future. In this instance we would need to pass a date as a parameter to the code above.
The Problem
The problem I wanted to discuss today is specific to Internet Explorer and Safari and is about how passing a date as shown below doesn’t work as expected:
var d = new Date("2011-02-07");
alert(d);
Or:
var d = new Date("2011-02-07T11:05:00");
alert(d);
If you were run the above code snippets across various browsers you would see that in IE you get ‘NaN’ returned and in Safari you get ‘Invalid Date’. Firefox, Chrome and Opera however will output the correct date.
The Solution
The problem lies in the format that you pass the required date to the Date() object. For some reason, and don’t ask me why, the two aforementioned browsers surprisingly do not support the date format “yyyy-mm-dd” and therefore fail. I haven’t managed to compile a definitive list of supported date formats, however I can tell you the following formats are definitely supported across all browsers and would advise sticking to one of these to avoid errors:
var d = new Date(2011, 01, 07); // yyyy, mm-1, dd
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss
var d = new Date("02/07/2011"); // "mm/dd/yyyy"
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"
var d = new Date(1297076700000); // milliseconds
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC
Follow us on Twitter
Subscribe to RSS Feed
I was having so many issues with this until I narrowed it down to the problem being the Date function in IE so after a quick google I came across your post and I just wanted to say thank you for posting a solution, You Rock!
Excelente ayuda amigo!
Muchas gracias!
Thanks a lot!!
i searched a lot… this is very useful.. thanks a lot:) keep posting
hey thanks man , good explanation, which was hard to find!!
keep it up!!
Thank you so much for the easy explanation. It works.
Thank you so much! I’ve been racking my brain for two hours straight, trying to figure out how to resolve this problem.
Thankyou so much for this post. Just needed this urgently to fix a big bug. God Bless You :-).
Thanks a lot!!!!
A had debugged five hours, starting with the guess, that the page brokes because of some ajax request problem – but no, that was the real problem. Thanks again!
Thanks a lot. This article help me very much.
Thanks a lot, I couldn’t understand where the problem came from, you saved me ;)
thanks man……this post did help me.
I just use slashes instead of hyphens.
Thanks a lot, you saved my time… Now time works on all browser
Thanks a lot for the information. I browsed a lot of websites and stackoverflow solutions but none resulting in a working solution. This works like a charm.
Thanks, saved me some time testing what format each browser supports.
All I needed was 2011-02-07T11:05:00 and 2011-02-07 to work but no such luck. They seem fine in Chrome and FireFox but not IE.
Now I’m going to use milliseconds instead, I’m avoiding mm/dd/yyyy as I’m in the UK and it makes no sense to use this.
I’m surprised however that when I pull dates from MS SQL I can format them as 2011-02-07T11:05:00 but not milliseconds (without doing extra work) yet in MS IE its the other way around 2011-02-07T11:05:00 is not supported yet milliseconds is.
Just another reason to get p!$$ed off at MS datetime support