2011-09-26 48 views
1

我有一个4列表,其中第二列是日期列,格式为“mm.dd.yyyy hh:mi am” 。默认的tablesorter不按日期列正确排序。我不得不在tablesorter中编写我自己的解析器,但它仍然不适合我。我不确定使用的正则表达式是否正确,如果任何人都可以在下面的代码中指出我的错误?我很感谢你的帮助。日期时间jQuery tablesorter解析器MM.DD.YYYY HH:MI AM格式

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打造新的解析器。排序的结果不起作用。它根本不分类数据。

回答

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

虽然这两种方法是好的,如果你只是对数据进行排序。

+1

果酱,感谢您的回应。第一个解决方案解决了问题。 –

+0

没问题。很高兴我能服务。 – Bojangles