排序日期不返回已排序的日期
Sorting Dates Does Not Return Sorted Dates
出于某种奇怪的原因,我编写的以下函数用于将日期字符串数组转换为javascript日期对象,对其进行排序,然后返回排序后的日期字符串数组,但排序不正确:
sortdates: function(dates, separator) {
var sorteddates = [],
datestr =[];
sorteddates = dates.map(function(val) {
return new Date(val.replace("/"+separator+"/g", " "));
}).sort();
for ( i=0; i<sorteddates.length; i++ ) {
datestr.push((sorteddates[i].getMonth()+1) + "-" + sorteddates[i].getDate() + "-" + sorteddates[i].getFullYear());
}
return datestr;
}
如果我制作一个日期字符串的测试数组并应用此函数:
var testarray = ["2013-8-1", "2013-8-8", "2013-8-15", "2013-8-22", "2013-9-5", "2013-9-12", "2013-8-2", "2013-8-3", "2013-8-4", "2013-8-7", "2013-8-11", "2013-8-14", "2013-8-18", "2013-8-25"];
console.log(sortdates(testarray, "-"));
我将以下内容记录到控制台:
["8-2-2013", "8-3-2013", "8-4-2013", "8-11-2013", "8-18-2013", "8-25-2013", "8-1-2013", "8-8-2013", "8-15-2013", "8-22-2013", "9-5-2013", "9-12-2013", "8-7-2013", "8-14-2013"]
显然没有分类。
.sort()
将按"字典"顺序排序,而不是按数字或日期/时间顺序排序。如果这些值不是字符串,它们将得到一个默认的字符串转换,对于日期,它不会给你一些有用的排序。
但您可以提供一个自定义排序回调,它知道如何对日期进行排序:
.sort(function(a,b) { return a.getTime() - b.getTime(); });
演示:http://jsfiddle.net/TUAz9/
sort()
将根据数组中条目的字符串表示进行排序。在这种情况下,Date的字符串表示形式类似于Thu Aug 01 2013 00:00:00 GMT-0700 (PDT)
,因此主要排序将按星期几的字母顺序进行。
Fri Aug 02 2013 00:00:00 GMT-0700 (PDT)
Sat Aug 03 2013 00:00:00 GMT-0700 (PDT)
Sun Aug 04 2013 00:00:00 GMT-0700 (PDT)
Sun Aug 11 2013 00:00:00 GMT-0700 (PDT)
Sun Aug 18 2013 00:00:00 GMT-0700 (PDT)
Sun Aug 25 2013 00:00:00 GMT-0700 (PDT)
Thu Aug 01 2013 00:00:00 GMT-0700 (PDT)
Thu Aug 08 2013 00:00:00 GMT-0700 (PDT)
Thu Aug 15 2013 00:00:00 GMT-0700 (PDT)
Thu Aug 22 2013 00:00:00 GMT-0700 (PDT)
Thu Sep 05 2013 00:00:00 GMT-0700 (PDT)
Thu Sep 12 2013 00:00:00 GMT-0700 (PDT)
Wed Aug 07 2013 00:00:00 GMT-0700 (PDT)
Wed Aug 14 2013 00:00:00 GMT-0700 (PDT)
您可能想考虑使用自定义排序回调函数,或其他日期表示形式——也许可以从将数组映射到时间戳值而不是Date
对象开始?
return new Date(/* stuff */).getTime();
以及稍后在函数中对格式化代码进行的相应更改。
把这些放在一起,像这样的函数会像你期望的那样工作:
sortdates: function(dates, separator) {
return dates.map(function(val) {
return new Date(val.replace("/"+separator+"/g", " ")).getTime();
}).sort().map(function(val) {
var d = new Date(val);
return (d.getMonth()+1) + "-" + d.getDate() + "-" + d.getFullYear();
});
}
相关文章:
- 如何合并不同集合的游标并按日期排序
- 如何在智能表中按日期对项目进行排序
- 在d3.js中对x轴上的日期进行排序
- 按ISO 8601日期对数组进行排序
- 如何按日期对Arraylist进行排序,然后将其传递给JSP
- 不带插件的JavaScript排序日期
- 以角度 js 格式排序日期
- 在MongoDB中保存和排序日期
- JS对象排序日期排序
- 排序日期不返回已排序的日期
- 数组排序日期未按预期工作
- 在jquery中验证和排序日期
- 有没有更好的智能排序日期的方法?
- 在Javascript中排序日期
- jQuery数据表-按隐藏列排序日期
- 如何排序日期和字符串在同一列在jquery插件有文件jquery. datatable .js
- 在JavaScript中排序日期字符串数组的最佳方式
- 谷歌自定义搜索排序日期范围标准不工作
- 排序日期对象数组错误javascript
- 猫鼬聚集而不是排序日期