gpt4 book ai didi

javascript - 如何先按数据再按时间对json数据进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:25 24 4
gpt4 key购买 nike

我有一个类似于下面的 json 数据。我正在尝试使用以下代码对其进行排序

function comp(a, b) {

return new Date(a.event_date) - new Date(b.event_date);
}

data=data.sort(comp)

但问题是两个事件可以在相同的日期但在不同的时间,这是 json 数据中称为 event_time 的另一个元素,可以在相同的 json 数据上看到。

如何排序,首先按 event_date 排序,如果它们相等,然后按各自的时间排序?

提前致谢?

{
id: "xxxx",
feed_id: "yyyy",
title: "abcd ",
detail: "efgh.",
event_date: "Tue, 26 May 2015 00:00:00 +1000",
event_time: "6:30pm",
date: "Thu, 23 Apr 2015 23:05:04 +1000",
expires_at: 1432634400,
end_time: "8:00pm",
timestamp: 1429794304
},
{
id: "xxxx",
feed_id: "yyyy",
title: "efgh",
detail: "efgh.",
event_date: "Tue, 26 May 2015 00:00:00 +1000",
event_time: "4:30pm",
date: "Thu, 23 Apr 2015 23:05:04 +1000",
expires_at: 1432634400,
end_time: "8:00pm",
timestamp: 1429794304
}, {
id: "xxxx",
feed_id: "yyyy",
title: "ijkl",
detail: "efgh.",
event_date: "Tue, 27 May 2015 00:00:00 +1000",
event_time: "1:30pm",
date: "Thu, 23 Apr 2015 23:05:04 +1000",
expires_at: 1432634400,
end_time: "8:00pm",
timestamp: 1429794304
}

最佳答案

这是一个简单的解决方案:

function comp(a, b) {
var d1= new Date(a.event_date)*1,
d2= new Date(b.event_date)*1,
t1= new Date('1/1/1970 '+(a.event_time.replace(/(a|p)/i, ' $1')))*1,
t2= new Date('1/1/1970 '+(b.event_time.replace(/(a|p)/i, ' $1')))*1;

return (d1+t1)-(d2+t2);
} //comp

这段代码:

  1. 在“pm”或“am”之前插入一个空格以使时间有效。
  2. 每次附加到日期 1/1/1970 并将其转换为日期。
  3. 将所有日期设为数字(自 1/1/1970 以来的毫秒数)。
  4. 从 a.event_date 和 a.event_time(作为日期)的总和中减去 b.event_date 和 b.event_time(作为日期)的总和。

无论“pm”或“am”的大小写如何,或“pm”或“am”之前的空格数(0 或更多)如何,它都有效。如果缺少“pm”或“am”,则采用 24 小时军用时间。

Fiddle

关于javascript - 如何先按数据再按时间对json数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com