Tablesorter datetime format dd-mmm-yyyy hh:mm 自定义解析器



我已经为此打破了很长一段时间。我有格式为 dd-mmm-yyyy hh:mm 的日期时间,显示在第 6 列的表排序器表中。但我无法让它正确订购。

解析 器:

$.tablesorter.addParser({
  id: 'dayMonthYearHHMM',
  is: function(s) {
      return false;
  },
  format: function(s, table) {
      var date = s.match(/^([0-9]|[0-9][0-9])-([a-zA-Z]{3})-([0-9][0-9][0-9][0-9])s([0-1]?[0-9]|2?[0-3]):([0-5]d)$/);
      var m = monthNames[date[2]];
      var d = String(date[1]);
      if (d.length == 1) {d = "0" + d;}
      var y = date[3];
      return parseInt(y + m + d + date[4] + date[5]);
  },
  type: 'numeric'
});
var monthNames = {};
monthNames["Jan"] = "01";
monthNames["Feb"] = "02";
monthNames["Mar"] = "03";
monthNames["Apr"] = "04";
monthNames["May"] = "05";
monthNames["Jun"] = "06";
monthNames["Jul"] = "07";
monthNames["Aug"] = "08";
monthNames["Sep"] = "09";
monthNames["Oct"] = "10";
monthNames["Nov"] = "11";
monthNames["Dec"] = "12";

以及表排序器定义:

    $(function() {
      $('.tablesorter-childRow td').hide();
      $(".tablesorter")
        .tablesorter({
          theme : 'blue',
          sortList: [[5, 1]],
          widgets: ["zebra"],
          headers: {
            5: { sorter: "dayMonthYearHHMM" }
          },              
          cssChildRow: "tablesorter-childRow"
        })
        .tablesorterPager({
          container: $("#pager"),
          size: 20,
          savePages: false,
          positionFixed: false
        });
      $('.tablesorter').delegate('.toggle', 'click' ,function(){
        $(this).closest('tr').nextUntil('tr:not(.tablesorter-childRow)').find('td').toggle();
        return false;
      });
    });

任何意见将不胜感激,谢谢

大多数现代浏览器都知道如何解析日期。

> new Date('31 Dec 2017 12:00:00')
//=> Sun Dec 31 2017 12:00:00 GMT-0600 (Central Standard Time)

为了确保它在更多浏览器 (MS Edge( 中工作,您需要用空格替换日期部分之间的任何额外字符:

$.tablesorter.addParser({
  id: 'dayMonthYearHHMM',
  is: function(s) {
      return false;
  },
  format: function(s, table) {
      var date = new Date(s.replace(/[-., ]+/g, ' '));
      return date instanceof Date && isFinite(date) ? date.getTime() : s;
  },
  type: 'numeric'
});

最新更新