我对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。
答案 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]M
或AM
。
现在括号PM
保存特定匹配项 - 请注意逗号位于括号之外。请注意,如果匹配,则数组中的第一个值是整个字符串。因此,第一部分()
包含日期部分(例如date[1]
),第二部分29 Jul 2013
包含时间(例如date[2]
)。
查看此demo,然后尝试使用basic tutorial on regular expressions。