DataTables:按纪元时间排序
Posted
技术标签:
【中文标题】DataTables:按纪元时间排序【英文标题】:DataTables: Ordering by Epoch Time 【发布时间】:2017-12-22 11:13:55 【问题描述】:如何对数据表中的日期进行排序,该数据表是从 DOM 中的 html 数据初始化的?我的日期是纪元时间戳,我使用 moment.js 根据需要显示(例如:2017 年 7 月 17 日)。
我应该注意,使用 data-order 或 data-sort attr 都不起作用(如此处所述:https://datatables.net/examples/advanced_init/html5-data-attributes.html)
PHP 示例:(这是从数据库收集所有返回行的循环的一部分——然后我在视图中回显整个 $member_return)
$member_return .= '<tr><td>'.$user->email.'</td><td>'.$user->first_name.'</td><td>'.$label-stat.'</td><td>'.$label-sub.'</td><td>'.(int)$user->created_on.'</td><td>--</td></tr>';
示例 HTML:
<tr>
<td>fake1@email.com</td>
<td>John2</td>
<td>Active</td>
<td>Active</td>
<td>1500317481</td>
<td>--</td>
</tr>
<tr>
<td>fake2@email.com</td>
<td>John2</td>
<td>Active</td>
<td>Active</td>
<td>1500317482</td>
<td>--</td>
</tr>
<tr>
<td>fake3@email.com</td>
<td>John3</td>
<td>Active</td>
<td>Active</td>
<td>1500317483</td>
<td>--</td>
</tr>
jQuery:
oTable = $('#view_members').DataTable(
"columns": [
data: "email" ,
data: "name" ,
data: "status" ,
data: "subscription" ,
data: "date",
type: "date",
render: function(data)
return moment.unix(data).format("MMMM DD, YYYY")
,
"sortable": false
]
)
使用此方法,日期将根据其日期进行排序,例如:
July 17, 2017
July 17, 2017
July 16, 2017
July 15, 2017
June 14, 2017
etc
但是,我的问题是它没有按纪元日期排序。在上面的示例中,虽然前两条记录可能都是在 2017 年 7 月 17 日创建的,但该列表中的第二条实际上应该是基于纪元时间的第一条(同样,这是一个示例 )。
问题:
如何在按纪元时间戳排序的同时以所需格式(月日、年)显示日期?
【问题讨论】:
如果您想显示人类可读的时间,然后对该列进行排序,我认为您不走运,因为您正在转换写入屏幕的时间。但是,您可以将纪元值存储在隐藏列中,并在单击日期列时找到对该列进行排序的方法。它很丑,但它可以工作。 【参考方案1】:如下更改您的日期列定义:
data: "date",
render: function(data, type, full, meta)
if(type === "display")
data = moment.unix(data).format("MMMM DD, YYYY");
return data;
这告诉 jQuery DataTables 仅将格式化日期用于显示目的,并将 Unix 时间用于所有其他目的,包括排序。
【讨论】:
以上是关于DataTables:按纪元时间排序的主要内容,如果未能解决你的问题,请参考以下文章