0

我对 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"}); 
    } 
); 

但它以“字母顺序”出现,即 29 前 2 前 17,不考虑日期方面。

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

我可以保证格式将始终如我上面指定的那样,并且我不想更改显示日期的外观,只是排序功能。

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

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

4

1 回答 1

1

试试这个解析器(它并不完美,因为它不验证日期,即它会接受一个时间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)。

查看这个关于正则表达式的基本教程,然后尝试使用这个正则表达式测试器

于 2013-08-07T03:11:35.717 回答