【发布时间】:2018-12-22 07:59:58
【问题描述】:
DataTables 仅以 YYYY-MM-DD 格式正确排序日期。他们排序为string的所有其他格式。
就我不喜欢在我的项目中为每个功能添加库/插件而言,我试图自己解决它。
DataTables 使用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 的回答作为解决方案。
【问题讨论】:
-
看看这篇文章:stackoverflow.com/questions/53146427/…。我在那里回答了如何在呈现列数据时使用
type参数。 -
嗯,我刚刚在我链接的文章中包含了 CDN 中的 Moment.js,然后我在我的代码中添加了一个新行:
$.fn.dataTable.moment('DD.MM.YYYY');,就是这样。它就像一个魅力。不过还是谢谢。 -
是的,我知道,但是当您不想使用
Moment或者当您例如在列上呈现图标并需要对其进行一些排序时,这是另一种选择。
标签: javascript datatables overriding