2016-05-13 9 views
1

Wir verwenden das Datatables ultimative Datum/Zeit Sortierung Plugin (https://datatables.net/blog/2014-12-18) zu versuchen und Datum Spalten zu sortieren, aber kein Glück bekommen es richtig Daten im richtigen Format zu sortieren. Wenn die Seite geladen wird, wird das folgende Skript ausführen:jQuery Datatables Ultimatives Datum/Zeit Sortierung Plugin

//sets the date format for datatables for sorting purposes 
//reference: https://datatables.net/blog/2014-12-18 
$.fn.dataTable.moment('M/D/YYYY'); 

/* Datatables */ 
$('.datatable').DataTable({ 
    language : { 
     search : "_INPUT_", 
     searchPlaceholder : "Search...", 
     paginate : { 
      "next" : '<i class="fa fa-chevron-right"></i>', 
      "previous" : '<i class="fa fa-chevron-left"></i>' 
     } 
    }, 
    responsive : { 
     details : { 
      display : $.fn.dataTable.Responsive.display.childRowImmediate, 
      type : 'column' 
     } 
    }, 
    order : [0, 'desc'], 

    //date sorting 
    columnDefs: 
    { 
    targets: 'date_sortable', 
    render: function (data, type, full, meta) { 
     if(type === 'display'){ 
     if(data){ 
      var mDate = moment(data); 
      data = (mDate && mDate.isValid()) ? mDate.format("M/D/YYYY") : ""; 
      console.log('rewrote data to ' + data); 
     } 
    } 
     console.log('date_sortable rendered'); 
    return data; 
    } 
    } 
}); 

sowohl Nach der Datentabellen Dokumentation und die Details, die ich auf dieser SO Post gefunden (DataTables Ultimate date/time sorting plug-in not working with Intl formats), habe ich date_sortable als Klassennamen auf dem <th /> Element in meinem HTML, aber es sieht so aus, als ob die render Funktion nicht aufgerufen wird, da meine console.log[...] Einträge nie ausgeführt werden. Ich kann im generierten HTML sehen, dass die Klasse auf meinem <th /> Element ist, und die Daten, die gezeigt werden, sind im richtigen Format ('n/j/Y', in PHP), also bin ich an einem totalen Verlust.

Alles sieht gut aus, also irgendwelche Tipps/Hinweise hier? Die Datumsreihenfolge scheint eher zufällig zu sein, mit Einträgen, die Daten wie 1/6/2016 in der Mitte zeigen (siehe Screenshot), die keinen Sinn ergeben.

Ich werde sagen, dass diese Tabelle ~ 2.055 Datensätze zeigt, ist es möglicherweise eine Leistung Sache? Dies wird derzeit nicht mit API-Aufrufen geladen, daher befinden sich alle Datensätze im generierten HTML als einzelne Datei.

Dates showing up in the middle

+1

Es ist nicht zufällig, es ist String-Sortierung statt numerischer. In diesem Beispiel ist es in der Reihenfolge sortiert wie 2, 2, 2, 6, 7 –

Antwort

0

kann man sich die unverschobenen Funktion in Datentabellen?

// Add type detection 
types.detect.unshift(function (d) { 
return moment(d, format, locale, true).isValid() ? 
    'moment-'+format : 
    null; 
}); 

wenn es der Fall ist, sollten Sie diese verwenden:

$.fn.dataTable.moment('YYYY-M-D'); 
+0

Wir verwenden dies um die Daten anzuzeigen: ' OrderDate)); ?> '. Kannst du erklären, was du meinst, indem du zu Zeitstempeln umwandelst und sie dann sortierst? Willst du das in der PHP irgendwo oder anderswo tun? – RubyHaus

+0

Ich entfernte die Lösung mit Zeitstempel, da es eine schmutzige Lösung ist! also werde ich es nicht für den Produktionscode verwenden! –

+0

Ich denke, der Moment, der von der Unshift-Funktion zurückgegeben wird, verwendet das lokale Datumsformat - also das Format Ihres Systems. Dies ist sicher anders als n/j/Y. –

0

Bitte versuchen Sie diese Geige (dies funktioniert mit Ihrem Datumsformat):

`http://jsfiddle.net/Marouen/9qdj53am` 

Hope this helfen.

Verwandte Themen