Tablesorter日期时间格式dd-mmm-yyyy hh:mm自定义解析器

时间:2018-04-19 17:43:14

标签: javascript date parsing datetime tablesorter

我现在已经有一段时间了。我的日期时间格式为dd-mmm-yyyy hh:mm,显示在第6列的tablesorter表中。但我无法正确订购它。

分析器:

$.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";

和tableorter定义:

    $(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;
      });
    });

任何意见都会非常感激,谢谢

1 个答案:

答案 0 :(得分:-1)

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

> 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'
});