下面的代码:
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给我一些建议,并提供解决相同问题的示例。 在此先感谢。
答案 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
将是排序日期数组。
答案 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