jQuery Datatables终极日期/时间排序插件

时间:2016-05-13 19:09:50

标签: php jquery datatables

我们正在使用Datatables终极日期/时间排序插件(https://datatables.net/blog/2014-12-18)来尝试对日期列进行排序,但没有任何运气可以让它以正确的格式正确排序日期。页面加载时,将运行以下脚本:

//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)上找到的详细信息,我在我的HTML中的date_sortable元素中添加了<th />作为类名,但是看起来render函数没有被调用,因为我的console.log[...]条目从不运行。我可以在生成的HTML中看到该类在我的<th />元素上,并且显示的日期格式正确('n/j/Y',在PHP中)所以我完全失去了。

所有内容都设置正确,所以这里有任何提示/指示?日期排序本质上似乎是相当随机的,条目的日期如2016年6月6日显示在中间(见截图),这根本没有意义。

我会说这张表显示约2,055条记录,所以它可能是一个表演的东西吗?这当前没有加载API调用,因此所有记录都作为单个文件在生成的HTML中。

Dates showing up in the middle

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:0)

请尝试这个小提琴(这适用于您的日期格式):

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

希望这会有所帮助。