2016-08-05 88 views
0

我正在使用jQuery DataTables,試圖用2種不同的日期類型對數據列進行排序。jquery數據表日期排序

我有2個不同的格式月/年和日/月/年,但他們沒有正確排序。

當前代碼:

function dateSorter(a, b) { 
    var datea = a.split("/"); 
    var dateb = b.split("/"); 

    if (datea[1] > dateb[1]) return 1; 
    if (datea[1] < dateb[1]) return -1; 
    if (datea[0] > dateb[0]) return 1; 
    if (datea[0] < dateb[0]) return -1; 
    if(datea.length == 2) 
    { 
    if (datea[2] > dateb[2]) return 1; 
    if (datea[2] < dateb[2]) return -1; 
    } 
    else 
    { 
    if(datea[1] > dateb[2]) return 1; 
    if(datea[2] < dateb[1]) return -1; 
    } 
    return 0; 
} 

以上是當前的代碼,它適用於月/年的格式,並對其排序罰款,但與這兩種格式混合。

目前這種方法從日/月/年格式排序日/月,但它不能正確排序。

例如(電流):

03/04/2016 
12/04/2017 
12/05/2015 
01/2015 
02/2015 
02/2016 
01/2018 
... 

它應該是:

01/2015 
02/2015 
12/05/2015 
02/2016 
03/04/2016 
12/04/2017 
01/2018 

回答

1
$.extend(jQuery.fn.dataTableExt.oSort, { 
    "date-time-odd-pre": function (a){ 
     if(/\d{1,2}\/\d{1,2}\/\d{4}/.test(a)){ 
      return parseInt(moment(a, "DD/MM/YYYY").format("X"), 10); 
     }else{ 
      return parseInt(moment(a, "MM/YYYY").format("X"), 10); 
     } 
    }, 
    "date-time-odd-asc": function (a, b) { 
     return a - b; 
    }, 
    "date-time-odd-desc": function (a, b) { 
     return b - a; 
    } 
}); 

應該work,但你需要提供的時刻。

希望有所幫助。

+0

+1,相信會起作用,但它也是基於對自定義排序插件的一個典型誤解:同時使用'-pre' _and_'-asc'和'-desc'函數沒有多大意義。要麼你有一個'-pre'函數爲dataTables自動檢測的基於類型的排序提供固定值,**或**你有'-asc'和'-desc'方法來完成工作。你不能擁有兩個。試一試這個代碼,我相信'date-time-odd-asc'和'date-time-odd-desc'永遠不會被執行。我也有過這種誤解,許多舊插件也包含這種冗餘。 – davidkonrad

+0

現在我不知道,謝謝@davidkonrad – annoyingmouse