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的回答作为解决方案。
答案 0 :(得分:2)
您可能想看看orthogonal-data。这使您可以定义用于对列进行排序的自定义值。在这种情况下,最直接的方法是使用时间戳进行排序,然后您可以以任何所需的格式显示日期。对于来自对象或ajax的数据,您可以像以下那样构造列定义:
{
data: 'date',
render: {
_: 'display',
sort: 'timestamp'
}
}
对于html源,您可以使用data-order
属性:
<td data-order="1545466488">Sat, Dec 22nd 2018</td>
(免责声明/出处:这或多或少直接来自上面链接的手册)