2012-10-19 139 views
0

好吧我有一個JavaScript代碼,在HTML表中按日期排序行。 現在我所做的是將日期轉換爲時間戳,並通過本地sort()javascript函數對它們進行排序,但似乎排序不正確。問題是什麼?排序日期與時間戳不正確?通過JavaScript在表中排序日期

這裏是我迄今爲止

var asc = true; 

    function sortTable() { 
     var tbl = document.getElementById("mytable").tBodies[0]; 
     var store = []; 
     for (var i = 0, len = tbl.rows.length; i < len; i++) { 
      var row = tbl.rows[i]; 
      var rowdatedata = row.cells[1].textContent; 
      var rowdatesplit = rowdatedata.split('/'); 
      var rowdatetimestamp = Math.round(new Date(parseInt(rowdatesplit[0]), parseInt(rowdatesplit[1]) - 1, parseInt(rowdatesplit[2]), 0, 0, 0).getTime() /1000); 
      if (!isNaN(rowdatetimestamp)) store.push([rowdatetimestamp, row]); 
     } 

     if (asc) { 
      store.sort(function(x, y) { 
       return x[0] - y[0]; 
      }); 
      document.getElementById('dateCol').textContent = 'Date ↑'; 
      asc = false; 
     } 
     else { 
      store.sort(function(x, y) { 
       return y[0] - x[0]; 
      }); 
      document.getElementById('dateCol').textContent = 'Date ↓'; 
      asc = true; 
     } 

     for (var i = 0, len = store.length; i < len; i++) { 
      var idno = i + 1; 
      store[i][1].cells[0].textContent = idno.toString(); 
      tbl.appendChild(store[i][1]); 
     } 
     store = null; 
    } 

http://jsfiddle.net/laupkram/kCxKn/

注意做到:只需點擊 「日期」 標題,它將排序

升序排序成績

ID Date ↑ Name 
1 2012/08/15 Lerry 
2 2012/03/16 Ansley 
3 2012/05/18 Robinson 
4 2012/10/05 Mp 

降序訂購結果

ID Date ↓ Name 
1 2012/10/05 Mp 
2 2012/05/18 Robinson 
3 2012/03/16 Ansley 
4 2012/08/15 Lerry 
+1

看起來不錯,使用的日期格式去年/日/月。我寧願將日期格式設置爲年 - 月 - 日,以避免混淆。 – Adder

+0

它真的不能正常工作..它不按正確的順序排序 –

+0

日期在您提供的jsfiddle中爲我正確排序。排序問題是什麼? – mccannf

回答

3

問題是parseInt是如何工作的,如果數字以0開頭,它將視爲八進制數。您必須執行parseInt(value, 10)以確保十進制轉換。