jQuery Datatables Ultimate 日期/时间排序插件
Posted
技术标签:
【中文标题】jQuery Datatables Ultimate 日期/时间排序插件【英文标题】:jQuery Datatables Ultimate Date/Time Sorting Plugin 【发布时间】:2016-09-10 02:25:26 【问题描述】:我们正在使用 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 中的 <th />
元素上添加了 date_sortable
作为类名,但它看起来像 @987654328 @ 函数没有被调用,因为我的 console.log[...]
条目从未运行。我可以在生成的 HTML 中看到该类位于我的 <th />
元素上,并且显示的日期格式正确('n/j/Y'
,在 php 中),所以我完全不知所措。
一切看起来都设置正确,所以这里有什么提示/指针吗?日期排序在本质上似乎是相当随机的,具有日期的条目(例如 2016 年 1 月 6 日)显示在中间(见截图),这根本没有意义。
我会说这张表显示了约 2,055 条记录,这可能是性能问题吗?这目前没有通过 API 调用加载,因此所有记录都在生成的 HTML 中作为单个文件。
【问题讨论】:
它不是随机的,它是字符串排序而不是数字。在此示例中,它按 2、2、2、6、7 的顺序排序 【参考方案1】:你能看看 Datatables 中的 unshifted Function 吗?
// Add type detection
types.detect.unshift( function ( d )
return moment( d, format, locale, true ).isValid() ?
'moment-'+format :
null;
);
如果是这样,你应该使用这个:
$.fn.dataTable.moment('YYYY-M-D');
【讨论】:
我们使用它来显示数据:<?php echo date('n/j/Y', strtotime($order->OrderDate)); ?>
。你能通过转换为时间戳然后排序来澄清你的意思吗?您是说在 PHP 的某个地方或其他地方执行此操作吗?
我删除了带有时间戳的解决方案,因为它是一个肮脏的解决方案!所以我不会将它用于生产代码!
我认为从 unshift 函数返回的时刻是使用本地日期格式 - 所以是您系统的格式。这肯定与 n/j/Y 不同。
我首先尝试了这种格式,但由于某种原因它仍然无法正常工作。我查找了 unshift 函数的 API 文档,但老实说,我并没有遵循它的意图。你能为我澄清一下吗?谢谢!
好的,您可以在 Datatables 代码中的“types.order[ 'moment-'+format+'-pre' ] = function (d) ” 下写下您的内容吗? - 或者把你的代码放到 jsfiddle【参考方案2】:
请试试这个小提琴(这适用于您的日期格式):
`http://jsfiddle.net/Marouen/9qdj53am`
希望这会有所帮助。
【讨论】:
以上是关于jQuery Datatables Ultimate 日期/时间排序插件的主要内容,如果未能解决你的问题,请参考以下文章
JQuery插件之Jquery.datatables.js用法及api