Parsing a date in long format from ATOM feed

后端 未结 3 1160
陌清茗
陌清茗 2021-01-22 12:12

I get this date in javascript from an rss-feed (atom):

2009-09-02T07:35:00+00:00

If I try Date.parse on it, I get NaN.

How can I parse

相关标签:
3条回答
  • 2021-01-22 12:25

    Here is my code, with test cases:

    function myDateParser(datestr) {
    var yy   = datestr.substring(0,4);
    var mo   = datestr.substring(5,7);
    var dd   = datestr.substring(8,10);
    var hh   = datestr.substring(11,13);
    var mi   = datestr.substring(14,16);
    var ss   = datestr.substring(17,19);
    var tzs  = datestr.substring(19,20);
    var tzhh = datestr.substring(20,22);
    var tzmi = datestr.substring(23,25);
    var myutc = Date.UTC(yy-0,mo-1,dd-0,hh-0,mi-0,ss-0);
    var tzos = (tzs+(tzhh * 60 + tzmi * 1)) * 60000;
    return new Date(myutc-tzos);
    }
    
    
    javascript:alert(myDateParser("2009-09-02T07:35:00+00:00"))
    javascript:alert(myDateParser("2009-09-02T07:35:00-04:00"))
    javascript:alert(myDateParser("2009-12-25T18:08:20-05:00"))
    javascript:alert(myDateParser("2010-03-17T22:30:00+10:30").toGMTString())
    
    0 讨论(0)
  • 2021-01-22 12:28

    maybe this question can help you.

    if you use jquery this can be useful too

    0 讨论(0)
  • 2021-01-22 12:42

    You can convert that date into a format that javascript likes easily enough. Just remove the 'T' and everything after the '+':

    var val = '2009-09-02T07:35:00+00:00',
        date = new Date(val.replace('T', ' ').split('+')[0]);
    

    Update: If you need to compensate for the timezone offset then you can do this:

    var val = '2009-09-02T07:35:00-06:00',
        matchOffset = /([+-])(\d\d):(\d\d)$/,
        offset = matchOffset.exec(val),
        date = new Date(val.replace('T', ' ').replace(matchOffset, ''));
    offset = (offset[1] == '+' ? -1 : 1) * (offset[2] * 60 + Number(offset[3]));
    date.setMinutes(date.getMinutes() + offset - date.getTimezoneOffset());
    
    0 讨论(0)
提交回复
热议问题