dsw88
dsw88

Reputation: 4592

How can I parse this date string consistently across browsers?

I'm using Javascript's Date object to parse a string into a milliseconds timestamp. I'm using Date.parse(), and the strings I'm parsing are of the following format: "2012-07-06 12:59:36-0600"

Date.parse performs nicely in Chrome, parsing into the correct timestamp I'd anticipate. However, every other browser returns "NaN" when I run the string through Date.parse().

I know that the Date object implementation is browser-specific, but I'd like to find a javascript solution that's capable of parsing strings of this type for any browser. Any suggestions on what else I could use in Javascript to achieve this?

Upvotes: 5

Views: 3815

Answers (3)

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324620

If the format is consistent, you can parse it yourself:

var date = "2012-07-06 12:59:36-0600";
function parseDatetime(input) {
    var match = input.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})([-+]\d{4})/);
    match.shift(); // discard the "full match" index
    match[2]--;
    match[4] += parseInt(match[6],10);
    return new Date(match[0],match[1],match[2],match[3],match[4],match[5]);
}

Upvotes: 1

Wayne
Wayne

Reputation: 60414

Convert the input to valid ISO 8601:

Date.parse("2012-07-06 12:59:36-0600".replace(' ', 'T'));

This was tested (and works) in Firefox.

Note:

Note that while time zone specifiers are used during date string parsing to properly interpret the argument, they do not affect the value returned, which is always the number of milliseconds between January 1, 1970 00:00:00 UTC and the point in time represented by the argument.

Upvotes: 7

davidethell
davidethell

Reputation: 12018

Have you tried DateJS? Maybe you don't want to add another library, but it will solve your crossbrowser problem.

Upvotes: 1

Related Questions