首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序日期不返回排序日期。

排序日期不返回排序日期。
EN

Stack Overflow用户
提问于 2013-08-04 05:37:15
回答 2查看 113关注 0票数 4

由于一些奇怪的原因,我编写的以下函数将日期字符串数组转换为javascript date对象,对它们进行排序,然后返回排序后的日期字符串数组不能正确排序:

代码语言: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;
}

如果我创建一个日期字符串的测试数组并应用此函数:

代码语言:javascript
复制
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, "-"));

我将以下内容记录到控制台:

代码语言:javascript
复制
["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"]

很明显没有排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-04 05:45:20

.sort()将按“字典”顺序排序,而不是数字或日期/时间顺序。如果这些值不是字符串,那么它们将得到一个默认的字符串转换,对于日期来说,这种转换不会为您提供有用的排序功能。

但是,您可以提供一个自定义的排序回调,它知道如何对日期排序:

代码语言:javascript
复制
.sort(function(a,b) { return a.getTime() - b.getTime(); });

演示:http://jsfiddle.net/TUAz9/

票数 1
EN

Stack Overflow用户

发布于 2013-08-04 05:47:46

sort()将根据数组中条目的字符串表示进行排序。在这种情况下,日期的字符串表示形式类似于Thu Aug 01 2013 00:00:00 GMT-0700 (PDT),因此主要排序将按周中的一天字母顺序进行。

代码语言:javascript
复制
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对象开始?

代码语言:javascript
复制
return new Date(/* stuff */).getTime();

对函数后面的格式代码进行相应更改的...along。

把所有这些放在一起,这样的函数就会像你所期望的那样工作:

代码语言:javascript
复制
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();
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18040035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档