jquery tablesorter排序日期dd mmm yyyy

时间:2013-08-06 19:08:16

标签: jquery tablesorter

我对tablesorter很新,但我有一个包含多个列的表,第三列是日期,以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具有不同含义的特殊键like this。在tablesorter中有什么可比的吗?如何确保正确排序一个日期列?

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

看起来像dateFormat:'usLongDate'接近我需要但不能正常工作

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

1 个答案:

答案 0 :(得分:1)

尝试使用此解析器(它不完美,因为它不验证日期,即它将接受99:99:99的时间;但是日期解析器将返回无效日期并默认返回纯文本({ {3}}):

$.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位数,{{1 *匹配任意“字”3个字母,\w{3}匹配任意数量的空格或标签,\s+匹配[AP]MAM

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

查看此demo,然后尝试使用basic tutorial on regular expressions