我有一个4列表,其中第二列是日期列,格式为“mm.dd.yyyy hh:mi am”。默认的tablesorter没有按日期列正确排序。我必须在tablesorter中编写自己的解析器,但它仍然不适合我。我不确定使用的正则表达式是否正确,是否有人可以在下面的代码中指出我的错误?我很感激你的帮助。
ts.addParser(
{
id: "srsDate",
is: function (s) {
return /\d{1,2}\.\d{1,2}\.\d{1,4} \d{1,2}:\d{1,2}\s(am|pm)/.test(s);
},
format: function (s) {
s = s.replace(/\./g, " ");
s = s.replace(/\:/g, " ");
s = s.replace("am", "0");
s = s.replace("pm", "1");
s = s.split(" ");
return $.tablesorter.formatFloat(new Date(s[0], s[1], s[2], s[3], s[4], s[5]).getTime() + parseInt(s[6]));
},
type: "numeric"
});
我称之为:
myapp.Sort = function () {
$(myapp.config.tblHistory).tablesorter({ headers: { 1: { sorter: 'srsDate'} }, sortList: [[0, 0]] });
}
我引用了date Sorting Problem with Jquery Tablesorter来构建新的解析器。排序的结果不起作用。它根本不对数据进行排序。
答案 0 :(得分:5)
我自己不使用tablesorter,但您是否考虑使用Date.parse(datestring)
?
您的功能可能就是:
ts.addParser({
id: "srsDate",
is: function (s) {
return /\d{1,2}\.\d{1,2}\.\d{1,4} \d{1,2}:\d{1,2}\s(am|pm)/.test(s);
},
format: function (s) {
return Date.parse(s);
},
type: "numeric"
});
这会将该日期作为Unix时间戳返回,以毫秒为单位。
如果要将其作为秒的数量返回,则将Date.parse(s)
的结果简单地除以1000:
function: function (s) {
return (Date.parse(s) / 1000);
}
如果您只是对数据进行排序,这两种方法都可以。