首页 > 解决方案 > 日期时间插件不在数据表中排序

问题描述

我无法为我的网站获得终极插件 ( https://datatables.net/blog/2014-12-18 )。我有一个日期时间列。来自 JSON 的列(称为 eisodos)的输入是dd/MM/yyyy HH:mm:ss(例如31/10/2018 10:03:00

SQL Server 中的字段是日期时间。在query.php中,我将其格式化dd/MM/yyyy HH:mm:ss并编码为 JSON。

如果我将它格式化为yyyy/MM/dd HH:mm:ss它在 Datatable 插件中的排序很好,但我希望它显示为dd/MM/yyyy HH:mm:ss.

我已经包含了两个脚本(最新版本):

<script src="bower_components/moment/min/moment.min.js"></script>

<script src="bower_components/moment/min/datetime-moment.js"></script>

我已经检查了一切。

我排序时得到的结果是这样的:

在此处输入图像描述

我已经搜索了两天,但找不到解决方案。

这是我的代码:

$(function ()
{
    $.fn.dataTable.moment('dd/MM/yyyy HH:mm:ss');

    var table = $('#example').DataTable(
    {
        ajax: {url: "query.php", dataType: "json", dataSrc: ''},
        "columns": [
            {"data": "eisodos"}
            // I have also tried the following (column render) but nothing changed.
            // "render": function(data, type, full) {return moment(data).format('dd/MM/yyyy HH:mm:ss');}   
        ],
        "language": {"url": "Greek.json"}
    });
});

标签: jquerydatetimedatatables

解决方案


在您的情况下,您将不得不使用该列typerender方法的参数。如需进一步了解此内容,请参阅Columns Render。基本上,此参数允许您为不同类型的操作(排序、显示等)格式化列数据。在您的情况下,您将需要执行以下操作:

$(function ()
{
    $.fn.dataTable.moment('dd/MM/yyyy HH:mm:ss');

    var table = $('#example').DataTable(
    {    
        ajax: {url: "query.php", dataType: "json", dataSrc: ''},
        "columns": [
        {
            "data": "eisodos",
            "render": function(data, type, full)
            {
                if (type == 'display')
                    return moment(data).format('dd/MM/yyyy HH:mm:ss');
                else
                    return moment(data).format('yyyy/MM/dd HH:mm:ss');
            }
        }],
        "language": {"url": "Greek.json"}    
    });
});

在前面的代码中,当操作用于显示时,日期将被格式化为西班牙方式,而对于其他操作(如排序),将使用英文格式。对于类似的问题,您也可以参考我之前做出的这个答案:

对格式化的数字 data.table 值进行排序


推荐阅读