如何使用javascript对日期数组进行排序?
问题描述:
我想排序日期数组。它完美无瑕。但是5月4日被列在阵列的最后一个元素中,这是错误的。你能帮我解决这个问题吗?接收如何使用javascript对日期数组进行排序?
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)
答
解决方案:
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]);
}
答
由于您降序(YMD),并与前面的零的值作为字符串这意味着它们是可排序也作为字符串。在这种情况下,您不需要进行任何转换,只需在拆分后将其排序为字符串数组即可。
答
更改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
排序,这是你的结果。为了解决这个问题,我添加了一个回调函数,该函数将确定一个项目是否在冒泡排序中的前面或后面,并且减去日期返回两个日期之间的秒数,这将是一个数字,并且易于减去并返回这种差异。
由于它们已经在y-m-d顺序中并且前面的零,为什么不把它们排序为字符串呢?同样使用'console.log'查看结果,警报不是一个好方法。 –