Javascript排序日期顺序错误

时间:2016-06-27 17:48:02

标签: javascript node.js sorting datetime

我无法弄清楚为什么Javascript(在Chrome,Safari或NodeJS中运行)似乎错误地对这些日期进行排序:

> [
      "2014-05-01T08:06:00.000Z",
      "2014-05-01T06:26:00.000Z",
      "2014-05-01T06:27:00.000Z"
  ].map(function(x) {return new Date(x)}).sort()

产生

[ Thu May 01 2014 01:06:00 GMT-0700 (PDT),
  Wed Apr 30 2014 23:26:00 GMT-0700 (PDT),
  Wed Apr 30 2014 23:27:00 GMT-0700 (PDT) ]

我已经查找了那个日期的奇怪时间变化,但找不到任何。

2 个答案:

答案 0 :(得分:2)

简单地调用sort方法将基本上基于字符串比较进行排序。所以对于基于日期对象的排序使用自定义排序函数。



console.log(
  [
    "2014-05-01T08:06:00.000Z",
    "2014-05-01T06:26:00.000Z",
    "2014-05-01T06:27:00.000Z"
  ].map(function(x) {
    return new Date(x)
  }).sort(function(a, b) {
    return a - b;
  })
)




如果要对原始数组进行排序,请避免使用map方法,并在compare函数内部解析日期字符串,然后再采取差异。



console.log(
  [
    "2014-05-01T08:06:00.000Z",
    "2014-05-01T06:26:00.000Z",
    "2014-05-01T06:27:00.000Z"
  ].sort(function(a, b) {
    return new Date(a) - new Date(b);
  })
)




答案 1 :(得分:0)

Array.prototype.sort接受回调,可以返回negativepositivezero值来对目标数组进行排序。

[
   "2014-05-01T08:06:00.000Z",
   "2014-05-01T06:26:00.000Z",
   "2014-05-01T06:27:00.000Z"
].sort(function(a, b){
    return (new Date(b) - new Date(a));
})