2017-10-18 80 views
1

我想約會我的列進行排序:如何按日期排序我的DataTables行?

var table = $('#table').DataTable({ 
    "order": [[0, "desc"]], 
}); 

但這裏是我的結果:

29.06.17 
27.06.17 
26.06.17 
22.08.17 
18.10.17 
15.09.17 

什麼我希望是這樣的:

18.10.17 
15.09.17 
22.08.17  
29.06.17 
27.06.17 
26.06.17 

六月,然後八月,然後9月,然後10月......

我測試了也:

"columnDefs": [ 
    { "type": "date-dd.mm.yy", targets: 0 } 
], 

但是這並沒有改變任何東西。

+0

我猜你有dateobjects工作,使其sortabl即請參閱:https://www.w3schools.com/jsref/jsref_obj_date.asp –

+0

它是什麼語言? – 1010

回答

1

dataTables date type uses Data.parse()它只支持一組有限的日期格式。歐式風格dd.mm.yy不可解析,因此日期是按alpha排序的。

可以對付data attributes,即增加一個data-sort="10/18/17"每一列,但我認爲這是更容易地創建一個小插件,返回有效日期:

$.extend($.fn.dataTableExt.oSort, { 
    "jarla-date-pre": function(a) { 
    a = a.split('.'); 
    return new Date(a[1]+'/'+a[0]+'/'+a[2]) 
    } 
}); 

使用方法如下:

columnDefs: [ 
    { type: 'jarla-date', targets: 0 } 
] 

演示 - >http://jsfiddle.net/vad94dcs/

+0

這工作真棒! – Jarla

0

您需要使用render函數,該函數允許您格式化顯示日期並使用原始日期值進行排序。

以下代碼使用moment.js javascript庫格式化日期。

{ 
    data: 'DateField', 
    render: function (data, type, row) { 
    // If display or filter data is requested, format the date 
    if (type === 'display' || type === 'filter') { 

        return (moment(data).format("ddd DD/MM/YYYY (HH:mm)")); 
       } 
    // Otherwise the data type requested (`type`) is type detection or 
    // sorting data, for which we want to use the raw date value, so just return 
    // that, unaltered 
       return data; 
      } 
     }, 

datatables forum, here鏈接到源。