Datatable:日期/时间排序插件不排序

Posted

技术标签:

【中文标题】Datatable:日期/时间排序插件不排序【英文标题】:Datatable: date / time sorting plug-in not ordering 【发布时间】:2017-10-28 19:26:18 【问题描述】:

我有一个基本的 SpringBoot 应用,嵌入式 Tomcat,Thymeleaf 模板引擎 我想订购数据表的 1 个日期列。

在我的 POJO 中:

public String getTimeFormatted() 
DateTimeFormatter formatter = 
            DateTimeFormatter.ofPattern("EEEE, MMMM d,yyyy h:mm,a", Locale.ENGLISH);
        LocalDateTime dateTime = LocalDateTime.ofEpochSecond(time, 0, ZoneOffset.UTC);      
        return dateTime.format(formatter);
    

在模板中:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.10.15/sorting/datetime-moment.js"></script>

<script th:inline="javascript">
$(document).ready(function() 

    $.fn.dataTable.moment( 'EEEE, MMMM d,yyyy h:mm,a' );

    $('#table').dataTable(   
        "bLengthChange": false,
        "pageLength": 25,
    ); 
 );
</script>

但它没有正确订购

【问题讨论】:

我做的技巧实际上是添加一个带有hidden的跨度和unix数据时间,所以DataTable可以正确排序...... 如果没有指定排序函数,数据表排序是按字母顺序排列的。 @balexandre 使用的解决方法是可以的,但“正确”的方法是根据您使用的日期格式定义排序函数。 datatables.net/plug-ins/sorting/#Custom-data-source-sorting 【参考方案1】:

这很容易调试。

我什至做了一个simple example。

您在代码中使用EEEE, MMMM d,yyyy h:mm,a 格式(我假设在春季),但您忘记将其转换为moment 格式...和from the docs,应该是:dddd, MMMM D,YYYY h:mm,a

所以代码实际上应该是:

$.fn.dataTable.moment("dddd, MMMM D,YYYY h:mm,a");

【讨论】:

【参考方案2】:

就个人而言,我更喜欢使用data-order attribute。然后我将时间戳传递给epochYYYYmmddHHiiss

您可以在此处查看示例:https://datatables.net/examples/advanced_init/html5-data-attributes.html

【讨论】:

以上是关于Datatable:日期/时间排序插件不排序的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Datatable - 日期排序不适用于月份(相对于日期的月份)

如何使用数据表插件按日期(从最旧到最新)排序列

如何按日期对 DataTable 列进行排序

DataTable 日期排序问题

jQuery dataTable 不显示排序图标

数据表按日期正确排序