我无法弄清楚为什么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) ]
我已经查找了那个日期的奇怪时间变化,但找不到任何。
答案 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
接受回调,可以返回negative
,positive
或zero
值来对目标数组进行排序。
[
"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));
})