2017-07-17 128 views
2

如何对我的数据表中的日期进行排序,这是从DOM中的HTML数据初始化的?我的日期是我使用moment.js按期望显示的时代时间戳(例如:2017年7月17日)。DataTables:按大纪元时间排序

我要指出,无论使用的数据阶数据排序 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>[email protected]</td> 
    <td>John2</td> 
    <td>Active</td> 
    <td>Active</td> 
    <td>1500317481</td> 
    <td>--</td> 
</tr> 
<tr> 
    <td>[email protected]</td> 
    <td>John2</td> 
    <td>Active</td> 
    <td>Active</td> 
    <td>1500317482</td> 
    <td>--</td> 
</tr> 
<tr> 
    <td>[email protected]</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

如下更改日期列定义:

{ 
    data: "date", 
    render: function(data, type, full, meta){ 
     if(type === "display"){ 
     data = moment.unix(data).format("MMMM DD, YYYY"); 
     } 

     return data; 
    } 
}  

这告诉jQuery的数据表使用格式化的日期仅用于显示和使用Unix时间的所有其他用途,包括排序。