按升序和降序排序字符串日期数组

时间:2014-03-26 12:23:42

标签: javascript jquery arrays sorting

下面的代码:

var dateArr = new Array();
dateArr[0] = "11-12-2012";
dateArr[1] = "9-12-2014";
dateArr[2] = "11-12-2012";
dateArr[3] = "9-12-2011";

必须按升序和降序对上述字符串日期数组进行排序。请AnyOne给我一些建议,并提供解决相同问题的示例。 在此先感谢。

2 个答案:

答案 0 :(得分:0)

尝试 -

var arr = [];
for(var i =0; i<dateArr.length; i++)
{
    date1 = dateArr[i].split("-");
    if(date1[0]<10){date1[0]='0'+date1[0]} 
    if(date1[1]<10){date1[1]='0'+date1[1]} 
    arr.push(new Date(date1[2], date1[1] - 1, date1[0]));
}

arr.sort(function(a,b){return a-b});  //asc
console.log(formatDateArr(arr));

arr.sort(function(a,b){return b-a});  //desc
console.log(formatDateArr(arr));

function formatDateArr(arr)
{
    formatedArr = [];
    for(var i=0; i<arr.length; i++)
    {
        var curr_date = arr[i].getDate();
        var curr_month = arr[i].getMonth() + 1; //Months are zero based
        var curr_year = arr[i].getFullYear();
        formatedArr.push(curr_date + "-" + curr_month + "-" + curr_year);
    }
    return formatedArr;
} 

arr将是排序日期数组。

JSFiddle

答案 1 :(得分:0)

这是未经测试的代码,但答案如下:


dateArr.sort(function(d1,d2) {
    var year1 = d1.substr(6,4);
    var year2 = d2.substr(6,4);
    if (year1 < year2) return -1;
    if (year1 > year2) return 1;

    var month1 = d1.substr(3,2);
    var month2 = d2.substr(3,2);
    if (month1 < month2) return -1;
    if (month1 > month2) return 1;

    if (d1 < d2) return -1;
    if (d1 > d2) return 1;
    return 0;
});

我不记得-1或1是指升序还是降序,因此可能需要交换它们。

编辑:挂起,这不起作用,因为有些日期不正好有10个字符。因此,你必须为“ - ”字符进行字符搜索(“indexOf()”方法),并在.substr方法中使用这些索引而不是盲目的6,4或3,2