jQuery DataTables插件:对德国日期进行排序

3
我使用jQuery DataTables插件,我的问题是我的德国日期无法正确排序。它具有以下格式:dd.mm.YYYY HH:iih 以下是我的代码: JSFIDDLE:

https://jsfiddle.net/uxaLn1e3/3/

HTML:

    <table id="my-table">
   <thead>
      <th>Nr. </th>
      <th>Date</th>
      <th>Name</th>
   </thead>
   <tr>
      <td>1</td>
      <td>27.08.2015 19:00h</td>
      <td>Carl</td>
   </tr>
   <tr>
      <td>2</td>
      <td>10.02.2016 14:00h</td>
      <td>Alan</td>
   </tr>
   <tr>
      <td>3</td>
      <td>07.12.2015 21:00h</td>
      <td>Bobby</td>
   </tr>
</table>

JS(已更新,带有ajax):

     $('#my-table').DataTable({
            "ajax": 'my_url',
            "columns": [
                {"data": "nr"},
                {"data": "date"},
                {"data": "name"}
            ],
                "autoWidth": false,
                "order": [],
                "fnCreatedRow": function( nRow, aData, iDataIndex ) {
                   var dateFull = aData.date;
                   var dateFullItems = dateFull.split(' ');
                   var dateDatum = dateFullItems[0];
                   var dateDatumItems = dateDatum.split('.');
                  var dateTime = dateFullItems[1];
                  var dateFormat = dateDatumItems[2] + '-' + dateDatumItems[1] + '-' + dateDatumItems[0] + 'T' + dateTime + ':00Z'; 

                  $(nRow).find('td:nth-of-type(2)').attr('data-sort', dateFormat);
            },
            });

我需要在我的JS中做哪些调整才能使日期排序正常工作?


你可以尝试这个终极日期/时间排序插件 - Stephan Bauer
我已经尝试过了。我在$('#my-table').DataTable(...)声明之前加入了$.fn.dataTable.moment( 'DD.MM.YYY HH:mm' )。但是我收到了以下控制台错误信息:$.fn.dataTable.moment不是一个函数 - Max
3个回答

10

在存储标准格式日期的td中添加一个data-sort属性(此处我使用了ISO格式,即YYYY-MM-DDTHH:ii:ssZ):

<tr>
  <td>1</td>
  <td data-sort="2015-08-27T19:00:00Z">27.08.2015 19:00h</td>
  <td>Carl</td>
</tr>
<tr>
  <td>2</td>
  <td data-sort="2016-02-10T14:00:00Z">10.02.2016 14:00h</td>
  <td>Alan</td>
</tr>
<tr>
  <td>3</td>
  <td data-sort="2015-12-07T21:00:00Z">07.12.2015 21:00h</td>
  <td>Bobby</td>
</tr>

现在,datatables 将考虑这个 data-sort 的值作为排序列,而不是使用 td 的 html。

实时演示

即使您动态创建表格,也可以通过以下两种方法之一实现此目标:

A. 在生成 html 时添加一个 data-sort 属性。

B. 使用 jQuery 在 datatable 创建后添加 data-sort,然后重新初始化 datatable。


1
您甚至可能想要更进一步,使用没有时区的裸时间戳值,或使用UTC时间和ISO-8601格式进行可排序性。 - tadman
不错的功能。还可以参考这个官方示例 - Stephan Bauer
@void:谢谢你。实际上我确实使用了ajax来加载我的数据。 "ajax": '{{ url('my_url', { 'idUser' : ''}) }}' + id,      "columns": [          {"data": "nr"},          {"data": "date"},          {"data": "name"}      ] 我不明白如何在这种情况下添加带有日期的data-sort属性。您能否解释一下? - Max
我刚刚更新了我的帖子。数据排序解决方案如何集成到更新后的代码中? - Max
请问您能否使用新的JS代码更新这个fiddle? - void
显示剩余2条评论

0
我认为你需要使用一个日期时间格式插件来处理你的性别数据脚本,或者使用一个插件来对格式化后的日期时间进行排序(我推荐Ultimate date / time sorting plug-in)。
针对你的情况,可以参考这个示例:jsfiddle.net/x92amfe4/4/。

0

您可以通过将字符串转换为JavaScript日期对象来对日期进行排序。 然后,您只需要拆分德语日期(“dd.mm.yy”)并创建一个新日期:

      new Date(date.split('.')[2], date.split('.')[1]-1, date.split('.')[0])

用于排序德国日期:

dates.sort((a, b) => {
      return new Date(b.split('.')[2], b.split('.')[1]-1, b.split('.')[0]) - new Date(a.split('.')[2], a.split('.')[1]-1, a.split('.')[0]) 
});

注意: 您可以使用任何日期格式创建 JavaScript 日期对象。
new Date(year, month(0-11) [, day [, hour [, minutes [, seconds [, milliseconds]]]]]);

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