DataTables:按纪元时间排序

Posted

技术标签:

【中文标题】DataTables:按纪元时间排序【英文标题】:DataTables: Ordering by Epoch Time 【发布时间】:2017-12-22 11:13:55 【问题描述】:

如何对数据表中的日期进行排序,该数据表是从 DOM 中的 html 数据初始化的?我的日期是纪元时间戳,我使用 moment.js 根据需要显示(例如:2017 年 7 月 17 日)。

我应该注意,使用 data-orderdata-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:按纪元时间排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ignited-Datatables 搜索时非法混合排序规则以进行“like”操作

DataTables 时刻按自定义格式排序

如何按 DataTables 中的隐藏列排序?

如何按日期对 DataTables 行进行排序?

jQuery DataTables - 按隐藏列排序日期

自定义按值的日期部分对 DataTables 列进行排序