DoTheEvo
DoTheEvo

Reputation: 931

How to convert date in RFC 3339 to the javascript date object(milliseconds since 1970)

Google calendar throws at me rfc3339, but all my dates are in those milliseconds since jan 1970.

rfc3999:

2012-07-04T18:10:00.000+09:00

javascript current time: (new Date()).getTime():

1341346502585

I prefer the the milliseconds because I only deal in countdowns and not in dates.

Upvotes: 14

Views: 37147

Answers (2)

Ry-
Ry-

Reputation: 224952

Datetimes in that format, with 3 decimal places and a “T”, have well-defined behaviour when passed to Date.parse or the Date constructor:

console.log(Date.parse('2012-07-04T18:10:00.000+09:00'));
// 1341393000000 on all conforming engines

You have to be careful to always provide inputs that conform to the JavaScript specification, though, or you might unknowingly be falling back on implementation-defined parsing, which, being implementation-defined, isn’t reliable across browsers and environments. For those other formats, there are options like manual parsing with regular expressions:

var googleDate = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})([+-]\d{2}):(\d{2})$/;

function parseGoogleDate(d) {
    var m = googleDate.exec(d);
    var year   = +m[1];
    var month  = +m[2];
    var day    = +m[3];
    var hour   = +m[4];
    var minute = +m[5];
    var second = +m[6];
    var msec   = +m[7];
    var tzHour = +m[8];
    var tzMin  = +m[9];
    var tzOffset = tzHour * 60 + tzMin;

    return Date.UTC(year, month - 1, day, hour, minute - tzOffset, second, msec);
}

console.log(parseGoogleDate('2012-07-04T18:10:00.000+09:00'));

or full-featured libraries like Moment.js.

Upvotes: 25

Spudley
Spudley

Reputation: 168705

There are two Javascript date libraries that you could try:

Both of these will give you functions that allow you to parse and generate dates in pretty much any format.

If you're working with dates a lot, you'll want to use use one of these libraries; it's a whole lot less hassle than rolling your own functions every time.

Hope that helps.

Upvotes: 4

Related Questions