1

我有以下脚本加入 2 个提要并在屏幕上显示它们

$.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. 如何将该日期字符串转换为正确的日期对象,以便对结果进行正确排序?
4

3 回答 3

4
  1. -0700表示 UTC 偏移量UTC-07:00
  2. 我强烈建议您使用Moment.js库来处理日期和时间、格式和转换,以使您的“日期和时间 JavaScript 生活”变得轻松有趣。

正如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));

小提琴

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

var sorted = data.sort(function(a, b) {
    return new Date(a.publishedDate) - new Date(b.publishedDate);
});
于 2013-09-23T14:34:14.943 回答
1

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

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

应该起作用的是

dates.sort(function(a, b){ return a - b; });
于 2013-09-23T14:42:50.450 回答
1

嗯,-0700 意味着.. 是......你可以在维基百科7 hours earlier than Greenwich Mean中查看更多信息

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

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

Date.parse('Thu, 1 July 2013 20:20:20');

瞧……这很容易……

于 2013-09-23T14:46:21.843 回答