如何使用javascript对日期数组进行排序?

时间:2016-06-09 04:25:20

标签: javascript

我正在尝试对日期数组进行排序。它完美无缺。但是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)

3 个答案:

答案 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()会自动处理日期,但不幸的是,情况并非如此。它只能alphabeticalnumerical排序,这就是您的结果。为了解决这个问题,我添加了一个回调函数,该函数将确定某个项目在冒泡排序中的顺序是先行还是后退,并且减去日期会返回两个日期之间的秒数,这将是一个数字并且很容易减去并返回差异。