2016-08-05 25 views
0

Ich benutze jQuery DataTables, versuchen, Datenspalte mit 2 verschiedenen Datumstypen zu sortieren.Jquery Datatables Datum Sortierung

Ich habe 2 verschiedene Formate Monat/Jahr und Tag/Monat/Jahr, aber sie sortieren nicht richtig.

Aktuelle Code:

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; 
} 

über die aktuellen Code, es funktioniert für Monat/Jahr-Format und sortiert sie in Ordnung, aber nicht mit beiden Formaten gemischt.

Dies sortiert derzeit Tag/Monat aus Tag/Monat/Jahr-Format, aber Jahr nicht richtig sortiert.

Beispiel (Strom):

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

es sein sollte:

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

Antwort

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; 
    } 
}); 

Sollte work, obwohl Sie Moment verfügbar benötigen.

Hoffe, dass hilft.

+0

+1, glaube, das würde funktionieren, aber es basiert auch auf einem typischen Missverständnis bei benutzerdefinierten Sortier-Plugins: Die Verwendung von beiden Funktionen "-pre" und "-asc" und "-desc" macht wenig Sinn . Entweder haben Sie eine "Pre" -Funktion, die feste Werte an DataTables liefert, die automatisch erkannt wird, oder ** Sie haben '-asc' und' -desc' Methoden, die _all_ die Arbeit machen. Du kannst nicht beides haben. Probieren Sie den Code aus, ich bin mir sicher, dass "Datum-Zeit-Ungerade-Asz" und "Datum-Zeit-Ungerade-Desc" überhaupt nicht ausgeführt werden. Ich habe dieses Missverständnis auch selbst gehabt, auch viele alte Plugins enthalten diese Redundanz. – davidkonrad

+0

Nun, dass ich es nicht wusste, danke @davidkonrad – annoyingmouse