2016-05-13 58 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; 
    } 
    } 
}); 

按照数据表文件和我对这个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显示在中间(见截图),这根本没有意义。

我会说这张表显示〜2,055条记录,所以它可能是一个性能的东西?目前这并不是用API调用加载的,所以所有记录都在生成的HTML中作为单个文件。

Dates showing up in the middle

+1

它不是随机的,它是字符串排序而不是数字。在这个例子中,它的排序顺序为2,2,2,6,7 –

回答

0

你可以看看数据表中未移位功能?

// 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

我们用这个来显示数据:'<?php echo date('n/j/Y',strtotime($ order-> OrderDate )); ?>'。你能否通过转换为时间戳然后排序来澄清你的意思?你是说在PHP的某个地方或其他地方这样做吗? – RubyHaus

+0

我用时间戳删除了解决方案,因为这是一个肮脏的解决方案!所以我不会将它用于生产代码! –

+0

我认为从unshift函数返回的时刻使用本地日期格式 - 所以您的系统的格式。这肯定与n/j/Y不同。 –

0

请试试这个小提琴(这与您的日期格式):

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

希望这会有所帮助。