数据表对日期和日期时间列进行排序

时间:2021-04-13 22:51:40

标签: jquery datatables momentjs

我有一个包含多个数据表的页面。一些表只有一个日期字段,用于对其进行排序,而同一页面上的其他表则有一个日期时间字段。日期/日期时间的语言环境是德语。

我可以让数据表按任一日期日期时间正确排序,但我无法按任一日期排序。我用一个表创建了这个小提琴: https://jsfiddle.net/r23yfdz8/

$.fn.dataTable.moment( 'DD.MM.YYYY' ); // uncomment this to sort column 1 correctly
    //$.fn.dataTable.moment( 'DD.MM.YYYY HH:mm' ); // this sorts column 2 (date and time) correctly
    $('#example').DataTable()
body {
  font-family: sans-serif;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.9/js/jquery.dataTables.js"></script>
<link href="https://cdn.datatables.net/1.10.0/css/jquery.dataTables.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.10.19/sorting/datetime-moment.js"></script>
<table id="example">
        <thead>
            <tr>
                <th>date</th>
                <th>date + time</th>
            </tr>
        </thead>
        <tbody>
<tr><td>20.01.2018</td><td>20.01.2018 09:00</td></tr>                 
<tr><td>12.02.2019</td><td>12.02.2019 16:00</td></tr>                 
<tr><td>13.06.2017</td><td>13.06.2017 09:00</td></tr>                 
<tr><td>20.01.2018</td><td>20.01.2018 16:00</td></tr>                 
<tr><td>01.10.2016</td><td>01.10.2016 09:00</td></tr>        
<tr><td>12.10.2018</td><td>12.10.2018 16:00</td></tr>                
<tr><td>21.10.2017</td><td>21.10.2017 09:00</td></tr>           
<tr><td>04.10.2018</td><td>04.10.2018 16:00</td></tr>            
<tr><td>13.10.2018</td><td>13.10.2018 09:00</td></tr>        
<tr><td>01.11.2018</td><td>01.11.2018 16:00</td></tr>        

        </tbody>
    </table>

  1. 点击第二列标题“日期 + 时间”。您会注意到它对表格进行了正确排序。
  2. 点击另一个列标题“日期”。您会注意到日期到处都是并且没有正确排序
  3. 在 JS 代码中,注释掉第二行,并取消注释第一行。重新运行后,小提琴现在可以正确对第 1 列进行排序,但无法对第 2 列进行排序。

我很想在 DOM 中向标签添加一个类(“排序日期时间”和“排序日期”),然后这些标签会告诉数据表如何对值进行排序,但我知识不足,无法弄清楚如何这样做。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

$.fn.dataTable.moment 插件可以在一张表中多次使用,以适应不同的格式。

如果我同时取消注释您的两个格式化程序,那么您的演示就可以正常工作。