2014-03-26 151 views
0

下面一段代碼:排序字符串日期陣列中升序和降序

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給我一些建議和解決相同的例子。 在此先感謝。

+3

Loop在元素上,將每個元素轉換爲日期對象,然後[對它們進行排序](https://stackoverflow.com/questions/11170054/compare-two-dates-with-javascript)。 – Andy

回答

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

+0

感謝您的回覆。這就是我一直在尋找的東西。 但是,當我在Chrome上運行它時,它工作正常。但是當在Mozilla中運行相同的代碼時,它顯示出以下結果:[「NaN-NaN-NaN」,「NaN-NaN-NaN」,「NaN-NaN-NaN」,「NaN-NaN-NaN」] 你能幫我把它整理出 –

+0

是的,實際上firefox不會創建格式爲DD-MM-YYYY的日期,所以我們必須先將它格式化一下,然後再將其轉換爲日期對象。我編輯了小提琴鏈接並回答,pl檢查! –

+0

現在感謝它的真正有用... –

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