DataTables:按纪元时间排序

3
我如何对由HTML数据在DOM中初始化的datatable中的日期进行排序?我的日期是时期时间戳,我使用moment.js显示所需的格式(例如:2017年7月17日)。需要注意的是,使用data-order或data-sort属性均不起作用(如此处所述:https://datatables.net/examples/advanced_init/html5-data-attributes.html)
示例PHP:(这是收集从DB返回的所有行的循环的一部分 - 然后我在视图中完整地回显$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
如果你想显示易读的时间并按该列排序,我认为你会很失望,因为你在写入屏幕时转换了时间。但是,你可以将纪元值存储在隐藏列中,并找到一种方法在单击日期列时按该列进行排序。这很丑陋,但可能有效。 - Difster
1个回答

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时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接