按年和月排序数组日期

时间:2015-06-23 18:40:26

标签: jquery arrays sorting date

我正在尝试按年和月对数组进行排序 这是我的意见:

var MyArray = ["2015-Jun", "2014-Nov", "2015-Dec", "2014-Aug", "2015-May"];

我想要这个输出:

[ "2014-Aug", "2014-Nov", "2015-May", "2015-Jun", "2015-Dec" ]

我找到了这个例子:http://jsfiddle.net/Tw6xt/63/
它几乎可以工作。输出:

2014-May,2015-Jun,2015-Dec,2014-Aug,2014-Nov

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您正在使用的setDate()方法设置了该月的某一天(1到31),并且因为您将一年“2015”传递给它,所以会给您一些意想不到的结果。

错误的: ad.setDate(as[0]);

您需要做的是改用setFullYear()方法。

ad.setFullYear(as[0]);

http://jsfiddle.net/Tw6xt/65/

HTML

<div>Before sort: <span id="before"></span></div>
<div>After sort: <span id="after"></span></div>

JS

var MyArray = ["2015-Jun", "2014-May", "2015-Dec", "2014-Aug", "2014-Nov"];
document.getElementById("before").innerHTML = String(MyArray);

(function () {

    MyArray.sort(function (a,b) {
        var ad = new Date(),
        bd = new Date(),
        months = {
            Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
            Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov:10, Dec:12
        };

        var as = a.split('-'),
            bs = b.split('-');

        ad.setFullYear(as[0]);
        ad.setMonth(months[as[1]]);
        bd.setFullYear(bs[0]);
        bd.setMonth(months[bs[1]]);

        return ad - bd;
    });
})();

document.getElementById("after").innerHTML = String(MyArray);

输出

Before sort: 2015-Jun,2014-May,2015-Dec,2014-Aug,2014-Nov
After sort: 2014-May,2014-Aug,2014-Nov,2015-Jun,2015-Dec

答案 1 :(得分:1)

我会将排序更改为:

MyArray.sort(function (a,b) {
    var as = a.split('-'),
        bs = b.split('-');
    if(parseInt(as[0])<parseInt(bs[0])){
        if(months[as[1]]<months[bs[1]])
            return -1;
        else if(months[as[1]]>months[bs[1]])
            return 1;
        else
            return 0;
    }else if(parseInt(as[0])>parseInt(bs[0])){
        return 1;
    }
    return 0;
});

这将首先按年订购,然后逐月订购,产量:2014年5月,2014年8月,2014年11月,2015年6月,2015年12月 - 12月