将字符串转换为日期

时间:2013-09-23 14:31:26

标签: javascript jquery

我有以下脚本加入2个Feed并在屏幕上显示

$.when( //get feed 1, //get feed 2 ).done(function(a1, a2){

    var data = a1[0]response.Data.feed.entries.concat(a2[0].responseData.feed.entries);

    var sorted = data.sort(function(a, b) {
        if(a.publishedDate > b.publishedDate) {
            return 1
        }
        if(a.publishedDate < b.publishedDate) {
            return -1
        }
        return 0
    });

    for( i = o; i <= sorted.length - 1; i++ ) {
        document.write(sorted[i].title);
        document.write(sorted[i].publishedDate);
    }

});

返回所有行,但不对行进行排序。排序似乎完全随机。我假设它是因为日期在JSON数据中格式如下:

Mon, 23 Sep 2013 04:37:45 -0700
  1. -0700是什么意思
  2. 如何将该日期字符串转换为正确的日期对象,以便我可以正确排序结果?

3 个答案:

答案 0 :(得分:4)

  1. -0700表示UTC偏移UTC-07:00
  2. 我强烈建议您使用Moment.js库来处理日期和时间,格式和转换,以使您的“日期和时间JavaScript生活”变得轻松有趣。
  3. 由于Alnitak表示此特定格式已被Date.parse接受,因此如果您使用其中一种可接受的格式,则可以使用本机JavaScript进行排序。

    var dateStrings,
        sortDates;
    
    dateStrings = [
        'Mon, 23 Sep 2013 04:37:45 -0700',
        'Sun, 22 Sep 2013 05:27:32 +0300',
        'Mon, 23 Sep 2013 03:14:17 -0700'
    ];
    
    sortDates = function(dateStrings) {
        return dateStrings.sort(function(a, b) {
            return new Date(a) - new Date(b);
        });
    };
    
    console.log(sortDates(dateStrings));
    

    Fiddle

    您的代码段中的变量sorted可以通过以下方式正确检索:

    var sorted = data.sort(function(a, b) {
        return new Date(a.publishedDate) - new Date(b.publishedDate);
    });
    

答案 1 :(得分:1)

您可以将字符串传递给new Date(...)以转换为真实的Date对象。

要排序,您还需要传递特定的排序函数,因为数组上的默认Javascript sort只是将元素转换为字符串并比较转换结果(因此任何"Mon"天都会被放置在任何"Sun"天之前。

应该有用的东西是

dates.sort(function(a, b){ return a - b; });

答案 2 :(得分:1)

嗯,-0700表示..是7 hours earlier than Greenwich Mean ...你可以在wikipedia中查看更多内容

如果你想正确转换任何日期,我强烈建议你使用库DateJS(http://www.datejs.com/

你可以使用合成糖.. !!创建你的对象......

Date.parse('Thu, 1 July 2013 20:20:20');
瞧...很容易......