【问题标题】:Javascript sort dates in array by year DESC, then month ASC, then day ASCJavascript按年DESC,然后是月ASC,然后是日ASC对数组中的日期进行排序
【发布时间】:2016-04-04 20:35:14
【问题描述】:

我有一系列课程以及从 AJAX 到 PHP 调用返回的日期。它作为“数据”返回,所以我们只需调用我们的数组数据:

var data = [{
  "course": "First Aid",
  "courseDate": "2016-04-25T00:00:00-06:00"
}, {
  "course": "CPR",
  "courseDate": "2016-04-06T00:00:00-06:00"
}, {
  "course": "ASL1",
  "courseDate": "2016-01-07T00:00:00-06:00"
}, {
  "course": "ASL2",
  "courseDate": "2016-03-25T00:00:00-06:00"
},
...etc...
];

我需要能够按日期降序显示它们。我正在使用这个简单的功能:

data.sort(function(a, b) {
   a = new Date(a.courseDate);
   b = new Date(b.courseDate);
   return a > b ? -1 : a < b ? 1 : 0;
});

$.each(data, function(key, val) {
   $('#courseHist').append('<br />' + val.course+' - '+val.courseDate);
});

不出所料,我得到了回报

1st Aid - 2016-04-25...
CPR - 2016-04-06...
ASL2 - 2016-03-25...
ASL1 - 2015-12-07...

从技术上讲,这是按日期降序排序的。但是,我需要按年份降序排序,然后是月份升序,然后是日期升序。像这样:

ASL2 - 2016-03-25...
CPR - 2016-04-06...
1st Aid - 2016-04-25...
ASL1 - 2015-12-07...

我知道我需要将我的日期返回分成几块并从那里进行安排,但我就是不知道如何做到这一点。非常感谢任何帮助!

或者,如果有人对此有解决方案,我可以在 PHP 端执行此操作。

如果你想弄乱它,我有一个小提琴 HERE。 - 使用来自用户 blex 的工作代码进行了更新

【问题讨论】:

  • 创建 Date 实例后,您可以使用 the Date API 提取年份 (.getFullYear())、月份 (.getMonth())、月份中的日期 (.getDate()) 等。
  • 这是我最初的想法,但我很难弄清楚如何在函数中实际写出它。这就是我需要它做的事情。
  • Fixed Fiddle: jsfiddle.net/ts5mks95 首先按年排序(降序),如果相等,按月排序(升序),如果相等,按天排序月份(升序)。
  • @DanKaufman 首先比较年份。如果它们相等,请比较月份。如果它们相等,请比较天数。
  • 伙计——我发誓我做这份工作的时间越长,我就越容易忽视简单的东西。谢谢,blex- 搞定了。

标签: javascript php arrays sorting date


【解决方案1】:

你可以对数据进行拆分,按年降、月升、日升独立排序。

var data = [{ "course": "First Aid", "courseDate": "2016-04-25T00:00:00-06:00" }, { "course": "CPR", "courseDate": "2016-04-06T00:00:00-06:00" }, { "course": "ASL1", "courseDate": "2016-01-07T00:00:00-06:00" }, { "course": "ASL2", "courseDate": "2016-03-25T00:00:00-06:00" }, { "course": "ASL2X", "courseDate": "2015-03-25T00:00:00-06:00" }];

data.sort(function (a, b) {
    var aa = a.courseDate.split(/\D/),
        bb = b.courseDate.split(/\D/);
    return bb[0] - aa[0] || aa[1] - bb[1] || aa[2] - bb[2];
});

document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

【讨论】:

  • 更干净!好的。谢谢。
  • 你可以做split(/\D/),不需要g标志。保存 3 个字符! ;-)
  • @RobG, ... 总是有一个较短的正则表达式 ... :)
猜你喜欢
  • 2023-04-04
  • 2013-08-14
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2019-10-06
  • 1970-01-01
  • 2020-07-22
相关资源
最近更新 更多