jquery - 如何使用 jquery 按日期范围对 json 进行排序?

标签 jquery sorting

我有一个日期范围 json,但我的 json 未排序,因此我的日期范围顺序不正确。我尝试了 2 种解决方案,但没有得到正确的结果。

下面是 json:

0: { Status : 1
 DateFrom : "2018-09-01 00:00" 
 DateTo : "2018-09-08 00:00" }
1: { Status : 1
 DateFrom : "2018-09-02 00:00" 
 DateTo : "2018-09-08 00:00" }
2: { Status : 1
 DateFrom : "2018-09-08 00:00" 
 DateTo : "2018-09-15 00:00" }
3: { Status : 1
 DateFrom : "2018-10-01 00:00" 
 DateTo : "2018-10-06 00:00" }
4: { Status : 1
 DateFrom : "2018-10-06 00:00" 
 DateTo : "2018-10-13 00:00" }
5: { Status : 1
 DateFrom : "2018-07-01 00:00" 
 DateTo : "2018-07-07 00:00" }
6: { Status : 1
 DateFrom : "2018-07-07 00:00" 
 DateTo : "2018-07-14 00:00" }
7: { Status : 1
 DateFrom : "2018-08-04 00:00" 
 DateTo : "2018-08-11 00:00" }

我尝试了下面的代码,但没有得到正确的结果。

var res = JSON.parse($("#hdfAvailabe").val());

//This one try
res.sort(function (left, right) {
return moment.utc(left.timeStamp).diff(moment.utc(right.timeStamp))
});

//This second try
res.sort(function (a, b) {
return a - b
})

这是我的异常(exception)输出:

0: { Status : 1
 DateFrom : "2018-07-01 00:00" 
 DateTo : "2018-07-07 00:00" }
 1: { Status : 1
 DateFrom : "2018-07-07 00:00" 
 DateTo : "2018-07-14 00:00" }
2: { Status : 1
 DateFrom : "2018-08-04 00:00" 
 DateTo : "2018-08-11 00:00" }
3: { Status : 1
 DateFrom : "2018-09-01 00:00" 
 DateTo : "2018-09-08 00:00" }
4: { Status : 1
 DateFrom : "2018-09-02 00:00" 
 DateTo : "2018-09-08 00:00" }
5: { Status : 1
 DateFrom : "2018-09-08 00:00" 
 DateTo : "2018-09-15 00:00" }
6: { Status : 1
 DateFrom : "2018-10-01 00:00" 
 DateTo : "2018-10-06 00:00" }
7: { Status : 1
 DateFrom : "2018-10-06 00:00" 
 DateTo : "2018-10-13 00:00" }  

任何人都知道该怎么做,请帮助我解决这个问题。

最佳答案

sort()是您需要使用的正确方法,但是您需要比较 DateFrom 的值将其转换为 Date 后的属性对象,像这样:

res.sort(function(a, b) {
  var aDate = new Date(a.DateFrom), bDate = new Date(b.DateFrom);
  return aDate - bDate;
});

var res = [{
  Status: 1,
  DateFrom: "2018-09-01 00:00",
  DateTo: "2018-09-08 00:00"
}, {
  Status: 1,
  DateFrom: "2018-09-02 00:00",
  DateTo: "2018-09-08 00:00"
}, {
  Status: 1,
  DateFrom: "2018-09-08 00:00",
  DateTo: "2018-09-15 00:00"
}, {
  Status: 1,
  DateFrom: "2018-10-01 00:00",
  DateTo: "2018-10-06 00:00"
}, {
  Status: 1,
  DateFrom: "2018-10-06 00:00",
  DateTo: "2018-10-13 00:00"
}, {
  Status: 1,
  DateFrom: "2018-07-01 00:00",
  DateTo: "2018-07-07 00:00"
}, {
  Status: 1,
  DateFrom: "2018-07-07 00:00",
  DateTo: "2018-07-14 00:00"
}, {
  Status: 1,
  DateFrom: "2018-08-04 00:00",
  DateTo: "2018-08-11 00:00"
}];

res.sort(function(a, b) {
  var aDate = new Date(a.DateFrom), bDate = new Date(b.DateFrom);
  return aDate - bDate;
});
console.log(res);

关于jquery - 如何使用 jquery 按日期范围对 json 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740366/

相关文章:

Java 编译错误缺少 return 语句。需要澄清

mysql - SQL 按数字排序并保持分组

jquery - 如果日期开始等于日期结束,如何切换元素的显示

javascript - 此 Ajax javascript 代码无法正常工作

java - TreeMap 是如何排序的

将三个数字中的最小到最大排序

c++ - seekp()、seekg()、read() 和 write() 在同一个文件上的问题

jQuery - 隐藏 el 并存储在数组中的属性

javascript - Jquery删除文本中的空格

javascript - 使用jquery的第n个元素