在DataTables中排序日期? (功能替代)

时间:2018-12-22 07:59:59

标签: javascript datatables override

DataTable仅以YYYY-MM-DD格式正确地对日期排序。他们将所有其他格式排序为string

据我所知,我不喜欢为项目中的每个功能添加库/插件,所以我尝试自己解决。

DataTable使用Date.parse()函数“了解”日期并对其进行排序。 (根据https://datatables.net/blog/2014-12-18)。 因此,我决定重写该功能,并以将其“理解”其他日期格式的方式对其进行修改。

我将此JS添加到了我的代码中:

            let origFunction = Date.parse;

            Date.parse = function(str) {

                // I want to parse this date format: 27.01.2018
                if (str.indexOf('.') > 0) {
                    str = convertDateToISO(str); // my function translates date into 2018-01-27
                }
                return origFunction(str);
            };

当我在浏览器控制台中对此进行测试时,Date.parse可以很好地与日期格式配合使用,但是DataTables仍将欧洲日期作为字符串进行排序。

知道我在做什么错吗?还是可以用这种方式做到?

已解决:

毕竟,看起来最简单的方法实际上是包含“ Moment.js”插件,如下所述:https://datatables.net/blog/2014-12-18#Operation 但是,尽管我的问题中有“没有插件”的要求,但我也接受@billynoah的回答作为解决方案。

1 个答案:

答案 0 :(得分:2)

您可能想看看orthogonal-data。这使您可以定义用于对列进行排序的自定义值。在这种情况下,最直接的方法是使用时间戳进行排序,然后您可以以任何所需的格式显示日期。对于来自对象或ajax的数据,您可以像以下那样构造列定义:

{
    data: 'date',
    render: {
        _: 'display',
        sort: 'timestamp'
    }
}

对于html源,您可以使用data-order属性:

<td data-order="1545466488">Sat, Dec 22nd 2018</td>

(免责声明/出处:这或多或少直接来自上面链接的手册)