jQuery Tablesorter не работает с датой - PullRequest
2 голосов
/ 05 марта 2020

Мой код:

<th class="sorter-shortDate">Date</th> $('table').tablesorter({dateFormat: "yyyymmdd"});

Сортировка работает по числам, но не работает по датам, Мой формат даты y-m-d H:i, я также пытался добавить пользовательский парсер:

$.tablesorter.addParser({
    id: "customDate",
    is: function(s) {
          return false;
          //use the above line if you don't want table sorter to auto detected this parser
          //else use the below line.
          //attention: doesn't check for invalid stuff
          //2009-77-77 77:77:77.0 would also be matched
          //if that doesn't suit you alter the regex to be more restrictive
          //return /\d{1,4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}/.test(s);
    },
    format: function(s) {
          s = s.replace(/\-/g," ");
          s = s.replace(/:/g," ");
          s = s.replace(/\./g," ");
          s = s.split(" ");
          return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2], s[3]).getTime()+parseInt(s[6]));
    },
    type: "numeric"
});

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

1 голос
/ 06 марта 2020

В парсере shortDate есть небольшая ошибка; он заменяет все . на /, преобразуя дату во что-то, что может понять встроенный синтаксический анализатор JS (например, 2009-12-31 08:09:10.1 становится 12/31/2009 08:09:10/1 - последнее десятичное число превращается в sla sh ломает все.

Вы можете обойти это, изменив регулярное выражение синтаксического анализатора коротких дат - demo

$.tablesorter.regex.shortDateReplace = /-/g;

$(function() {
  $('table').tablesorter({
    theme: 'blue',
    dateFormat: 'yyyymmdd'
  });
});
...