用于MM.DD.YYYY HH:MI AM格式的日期时间的jQuery tablesorter解析器

时间:2011-09-26 20:38:44

标签: jquery

我有一个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来构建新的解析器。排序的结果不起作用。它根本不对数据进行排序。

1 个答案:

答案 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);
}

如果您只是对数据进行排序,这两种方法都可以。