jquery tablesorter如何排序时间格式2014-07-11-02.10.03

时间:2014-07-11 05:34:23

标签: jquery tablesorter

我试图使用Jquery tablesorter插件来订购像这样的时间...

  

2014-07-11-02.10.03

所以那是......

  

YYYY-MM-DD-HH.mi.ss

我已尝试关注之前的帖子(date Sorting Problem with Jquery Tablesorter)并执行以下操作....

$.tablesorter.addParser({ 
    id: "customDate",
    is: function(s) {
        return /\d{1,4}-\d{1,2}-\d{1,2}-\d{1,2}-\d{1,2}.\d{1,2}\.\d+/.test(s);
    },
    format: function(s) {
        s = s.replace(/\-/g," ");
        s = s.replace(/:/g," ");
        s = s.replace(/\./g," ");
        s = s.split(" ");
        return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]).getTime()+parseInt(s[6]));
    },
    type: "numeric"
});

$("#tabHistoryBackups").tablesorter({
    sortList: [[3,1],[0,0]], 
    stripeRowsOnStartUp: true
});

但它不起作用,我无法理解我可能在哪里出错。有人可以帮我解决这个问题并告诉我我的情况有什么问题吗?这是我的表格。

enter image description here

感谢

1 个答案:

答案 0 :(得分:1)

您的日期时间值不包含毫秒数,因此您需要相应地更新RegEx:

is: function(s) {
    return /\d{1,4}-\d{1,2}-\d{1,2}-\d{1,2}\.d{1,2}\.\d{1,2}/.test(s);
},

您还可能会注意到,.已被转义(\.),意为文字.。这是因为,除非它已被转义或成为字符类的一部分,.是一个RegEx元字符,意思是“任何东西”。

您还需要更新format方法以忽略毫秒,因为您的值不包含它们:

format: function(s) {
    s = s.replace(/\-/g, " ");
    s = s.replace(/\./g, " ");
    s = s.split(" ");
    return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]).getTime());
}