如何使用jquery tablesorter对日期进行排序,格式为’dd / mm / yyyy – dd / mm / yyyy’

我的日期是dd / mm / yyyy – dd / mm / yyyy格式。 如何使用jquery tablesorter对此进行排序。 我尝试使用sorter对其进行排序:“shortDate”和dateFormat:’ddmmyyyy’但它没有按正确的顺序排序。

您需要创建一个自定义解析器才能对列进行排序。 此解析器存在问题,因为使用filter小部件( 演示 )很难使其正常工作:

 $(function() { $.tablesorter.addParser({ id: "date-range", is: function(){ return false; }, format: function(s, table, cell) { var dates = s.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/g, "$2/$1/$3").split(' - '), parsed = []; if (dates.length) { $.each(dates, function(i,d){ var v = new Date(d); parsed.push($.type(v) === 'date' ? v.getTime() : d); }); } return parsed.length ? parsed.join('') : s; }, parsed : true, type: "text" }); // call the tablesorter plugin $("table").tablesorter({ headers : { 0 : { sorter: 'date-range' } } }); }); 

更新(评论中的问题):

格式function代码执行以下操作:

  • 通过将日期从“dd / mm / yyyy”更改为“mm / dd / yyyy”来修改日期,以便日期解析器( new Date()将识别所需的日期设置)
  • split(' - ')拆分日期范围,并从范围字符串中创建数组中的两个日期。
  • dates.length确保我们有一个包含内容的数组
  • $.each()遍历每个日期字符串
    • 它从字符串创建数据对象
    • 然后将其添加到新数组中,作为日期(以毫秒为单位)或原始字符串(如果它不是有效日期)
  • 它返回新数组连接在一起(两个日期的时间,以毫秒为单位)或原始字符串(如果没有日期范围)。

因此,此方法无法与filter窗口小部件一起使用的原因是因为日期被组合(作为字符串,未添加)以允许正确排序已分析的日期。 此外,从编写此描述开始,我意识到具有单个日期的单元格不会被解析为以毫秒为单位的时间,而是作为原始日期字符串返回。 无论哪种方式,非日期范围单元格将与日期范围单元格分开。

Date
28/04/2014 - 11/07/2014
28/04/2014 - 13/05/2014
22/07/2014 - 22/07/2014
22/05/2014 - 22/05/2014