2014-04-06 67 views
1

我的tablesorter表不正確排序日期和空字段。Tablesorter訂購日期和空日期不正確

我期望空字段被視爲零,並被分組在頂部/底部。相反,我會在它們下面找到一些日期。

$('table').tablesorter({ 
    widthFixed: true, 
    // sort on the last name in ascending order 
    sortList: [ 
     [2, 0] 
    ], 
    dateFormat: "ddmmyyyy", 
    emptyTo: "zero", 
    sortInitialOrder: "desc", 
    headers: { 
     3: { 
      sorter: "shortDate" 
     }, 
     4: { 
      sorter: "shortDate" 
     }, 
     5: { 
      sorter: "shortDate" 
     }, 
     6: { 
      sorter: "shortDate" 
     } 
    }, 
    textExtraction: { 
     3: function (n, t, c) { 
      return $(n).attr('data-date'); 
     }, 
     4: function (n, t, c) { 
      return $(n).attr('data-date'); 
     }, 
     5: function (n, t, c) { 
      return $(n).attr('data-date'); 
     } 
    }, 
    widgets: ['zebra', 'columns'] 
}); 

看到小提琴here。使用'出生日期'列進行排序。

回答

1

「shortDate」分析器將所有日期轉換爲以毫秒爲單位的時間,以便日期比較(使用帶有過濾器小部件的操作員或日期範圍)並簡化日期排序。爲了達到這個目的,它使用javascript函數getTime()

getTime方法返回的值是自1970年1月1日00:00:00 UTC以來的毫秒數。

因此,您注意到的問題是因爲非日期單元格被視爲具有零值,並且未正確排序的日期是日期「1/1/1930」。進入這個日期到JavaScript控制檯,你會看到這樣的結果:

new Date('1/1/1930').getTime() 
// returns -1262282400000 

記住,這是因爲1/1/1970時間,所以時間會返回一個負數,這當然是小於零。

的最簡單的解決辦法是隻設置emptyTo選項"min",其設置所有空單元格的值爲最大負數(demo):

+1

感謝您的迅速答覆。我只注意到一些奇怪的事情:當我按升序排序時,我期望「未設置」位於列表的頂部 - 而不是他們的底部。排序降序的行爲方式相反。如果將'emptyTo'更改爲'「max」',則表現出預期的方式:) – Phoxphyre