jquery tablesorter排序日期dd mmm yyyy

我对tablesorter很新,但我有一个包含多个列的表,第三列是日期,以dd mmm yyyy, hh:mm:ss (am/pm)的forms从DB返回dd mmm yyyy, hh:mm:ss (am/pm)

例如

 29 Jul 2013, 1:12:23 PM 2 Aug 2013, 3:59:59 PM 17 Jul 2013, 09:30:00 AM 

然后我排序我的桌子

 $(document).ready(function() { $("#myTable").tablesorter({sortInitialOrder: "desc"}); } ); 

但它以“字母顺序”出现,意思是在17之前的2之前的29,而不是考虑日期方面。

看起来我可以传入一个dateFormat选项,但我无法让它工作。 我知道Java有特殊的键,具有不同的含义。 在tablesorter中有什么可比性的吗? 如何确保一个日期列正确排序?

我可以保证格式将始终如上所述,我不想更改显示日期的外观,只需更改排序function。

看起来像dateFormat:’usLongDate’接近我需要但不起作用

更新:我认为我的问题是我在对象中有更多信息而不仅仅是日期,但是我想按日期排序。 这是我工作的jsFiddle 。

尝试这个解析器(它不完美,因为它不validation日期,即它将接受99:99:99的时间;但是然后日期解析器将返回无效日期并默认返回纯文本( 演示 ):

 $.tablesorter.addParser({ id: "date", is: function (s) { return false; }, format: function (s, table) { var date = (s + '').match(/(\d{1,2}\s+\w{3}\s+\d{4}),(\s+\d{1,2}:\d{1,2}:\d{1,2}\s+[AP]M)/); return date ? new Date(date[1] + date[2]).getTime() || s : s; }, type: "numeric" }); 

更新:详细说明正则表达式并回答你的评论…基本上正则表达式匹配一个模式: \d{1,2}匹配任何1或2位数, \d{4}匹配任何4位数, \w{3}匹配任何“字”长度为3个字母, \s+匹配任意数量的空格或制表符, [AP]M匹配AMPM

现在括号()保存特定匹配 – 请注意逗号在括号之外。 请注意,如果匹配,则数组中的第一个值是整个字符串。 因此,第一部分date[1]包含日期部分(例如29 Jul 2013 ),第二部分date[2]包含时间(例如, 1:12:23 PM )。

查看这个关于正则表达式的基础教程 ,然后尝试搞乱这个正则表达式测试器 。