【问题标题】:jquery tablesorter sort date dd mmm yyyyjquery tablesorter 排序日期 dd mmm yyyy
【发布时间】:2013-08-06 19:08:15
【问题描述】:

我对 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 有不同含义的特殊键 like this。 tablesorter有什么可比的吗?如何确保正确排序一个日期列?

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

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

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

【问题讨论】:

标签: jquery tablesorter


【解决方案1】:

试试这个解析器(它并不完美,因为它不验证日期,即它将接受99:99:99 的时间;但是日期解析器将返回一个无效的日期并默认返回纯文本(demo ):

$.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)。

看看这个basic tutorial on regular expressions,然后试试this regex tester

【讨论】:

  • 太棒了!谢谢!您能否就其工作原理给出一个英文解释?这个正则表达式本质上是做什么的?再次感谢!
  • 抱歉这么久才回复。我已经为你更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多