2016-05-13 4 views
1

Мы используем плагин для определения даты и времени Datatables (https://datatables.net/blog/2014-12-18), чтобы попытаться отсортировать столбцы даты, но не успели получить правильную сортировку дат в правильном формате. При загрузке страницы, следующий скрипт запускается:jQuery Datatables Ultimate Дата/время Сортировочный плагин

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

Согласно и документации DataTables и детали, которые я нашел на этом SO пост (DataTables Ultimate date/time sorting plug-in not working with Intl formats), я добавил date_sortable в качестве имени класса на <th /> элемент в моем HTML, но похоже, что функция render не вызывается, так как мои записи console.log[...] никогда не запускаются. Я вижу в сгенерированном HTML класс на моем элементе <th />, и показанные даты находятся в правильном формате ('n/j/Y', на PHP), поэтому я полностью потеряю.

Все выглядит правильно, поэтому любые советы/указатели здесь? Порядок дат кажется довольно случайным по своему характеру, причем записи, содержащие даты, такие как 1/6/2016, отображаются в середине (см. Снимок экрана), что не имеет никакого смысла.

Я скажу, что эта таблица показывает ~ 2055 записей, так ли это возможно? В настоящее время это не загрузка вызовов API, поэтому все записи находятся в сгенерированном HTML в виде одного файла.

Dates showing up in the middle

+1

Это не случайность, это сортировка строк, а не числовая. в этом примере они отсортированы по порядку как 2, 2, 2, 6, 7 –

ответ

0

вы можете посмотреть на несмещенной функции в DataTables?

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

, если это так, то вы должны использовать это:

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

. Мы используем это для отображения данных: ' OrderDate)); ?> '. Можете ли вы уточнить, что вы имеете в виду, перейдя на временные метки, а затем на сортировку? Вы хотите сделать это на PHP где-нибудь или где-нибудь еще? – RubyHaus

+0

Я удалил решение с меткой времени, поскольку это грязное решение! поэтому я не буду использовать его для производственного кода! –

+0

Я думаю, что момент, возвращенный функцией unshift, использует локальный формат даты - так что формат вашей системы. Это, безусловно, отличается от n/j/Y. –

0

Пожалуйста, попробуйте эту скрипку (это работает с форматом дата):

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

Надеется, что это поможет.