我正在尝试对日期数组进行排序。它完美无缺。但是5月4日列在数组的最后一个元素中是错误的。你能帮我解决这个问题吗?
var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed";
var arrayStrings = listOfString.split(',');
var dateArray = new Array();
var count = 0;
for (var i = 0; i < arrayStrings.length; i++) {
dateArray[count++] = new Date(arrayStrings[i].split('|')[0]);
}
dateArray.sort();
for (var i = 0; i < dateArray.length; i++) {
alert(dateArray[i]);
}
收到的输出
Fri Apr 15 2016 05:30:00 GMT+0530 (India Standard Time)
Tue Apr 19 2016 05:30:00 GMT+0530 (India Standard Time)
Tue May 24 2016 05:30:00 GMT+0530 (India Standard Time)
Wed Jun 01 2016 05:30:00 GMT+0530 (India Standard Time)
Wed May 04 2016 05:30:00 GMT+0530 (India Standard Time)
答案 0 :(得分:1)
由于您将值作为字符串按降序排列(y-m-d)并且具有前面的零,这意味着它们也可以作为字符串排序。在这种情况下,您不需要进行任何转换,只需在拆分后排序为字符串数组。
答案 1 :(得分:0)
解决方案:
var listOfString = "2016-05-24|Failed,2016-05-04|Failed,2016-04-19|Passed,2016-04-15|Passed,2016-06-01|Failed";
var arrayStrings = listOfString.split(',');
var dateArray = new Array();
var count = 0;
for (var i = 0; i < arrayStrings.length; i++) {
dateArray[count++] = arrayStrings[i].split('|')[0];
}
dateArray.sort();
for (var i = 0; i < dateArray.length; i++) {
console.log(dateArray[i]);
}
答案 2 :(得分:0)
将您的date.sort()
更改为此
dateArray.sort(function(a,b) {
return a-b;
});
返回
VM126:57 Fri Apr 15 2016 05:30:00 GMT+0530 (IST)
VM126:57 Tue Apr 19 2016 05:30:00 GMT+0530 (IST)
VM126:57 Wed May 04 2016 05:30:00 GMT+0530 (IST)
VM126:57 Tue May 24 2016 05:30:00 GMT+0530 (IST)
VM126:57 Wed Jun 01 2016 05:30:00 GMT+0530 (IST)
您认为.sort()
会自动处理日期,但不幸的是,情况并非如此。它只能alphabetical
或numerical
排序,这就是您的结果。为了解决这个问题,我添加了一个回调函数,该函数将确定某个项目在冒泡排序中的顺序是先行还是后退,并且减去日期会返回两个日期之间的秒数,这将是一个数字并且很容易减去并返回差异。