javascript - 排序日期不返回排序日期

标签 javascript jquery

由于某些奇怪的原因,我编写的以下用于将日期字符串数组转换为 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/

关于javascript - 排序日期不返回排序日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18040035/

相关文章:

javascript - 为什么 jQuery .prop() 不适用于 'allowfullscreen' ?

javascript - Node js中 "switch case"的执行顺序是什么

javascript - 将 ajax 调用中的 JSON 数据显示为 HTML

javascript - jQuery - 当焦点离开一组控件时引发事件

php - 用于文件上传的 jQuery 进度条

javascript - 如何将 datepicker 结束日期设置为从当前日期起 20 年?

javascript - 你能初始化一个函数吗? - Javascript

javascript - 表中 Tr 的最高 margin

javascript - JQuery 动画在 IE8 中不起作用

javascript - CKEDITOR : Select text using start , 结束索引位置