使用Jquery Tablesorter排序日期问题

CFU*_*ser 23 jquery tablesorter

我正在尝试排序一个像列一样的表2009-12-17 23:59:59.0.我正在使用下面的应用排序

$(document).ready(function() 
        { 
            $("#dataTable").tablesorter();  
        } 
    );
Run Code Online (Sandbox Code Playgroud)

但它不适用于格式为yyyy-mm-dd的日期.任何人都可以建议我如何应用这种格式进行排序?

小智 36

按英国/欧洲日期格式dd/mm/yyyy排序:

$("#tableName").tablesorter({dateFormat: "uk"});
Run Code Online (Sandbox Code Playgroud)

  • 干得好!他们在文档中错过了这一个!http://tablesorter.com/docs/#Configuration (4认同)

jit*_*ter 35

正确的做法是为这种自定义格式添加自己的解析器.

检查这一点以掌握其工作原理.

jQuery Tablesorter:添加自己的解析器

然后查看tablesorter源代码(搜索uslongdate,shortdate,然后观察日期格式的解析器是如何由tablesorter在内部完成的.现在为您的特定日期格式构建一个类似的解析器.

jquery.tablesorter.js

这应该符合你的喜好

ts.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}:\d{1,2}\.\d+/.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], s[4], s[5]).getTime()+parseInt(s[6]));
    },
    type: "numeric"
});
Run Code Online (Sandbox Code Playgroud)

现在只是把它应用到你有这种格式的列(如假设您的自定义日期居住在列在第7列(6列指7,因为列的阵列zerobased)

$(function() {
    $("table").tablesorter({
        headers: {
            6: { sorter:'customDate' }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 好吧,如果我动态检索表并且我不知道哪一列具有日期格式,在这种情况下有什么想法吗? (2认同)
  • 检查修改后的代码 现在您可以省略较低的代码片段,因为tablesorter应该自动为正确的列选择分拣机 (2认同)

V.B*_*V.B 10

使用最新版本 2.18.4,您可以简单地这样做。只需提供默认日期格式,并在特定列中设置列日期格式,这仅适用于“shortDate”排序器。

$('YourTable').tablesorter(
            {
                dateFormat:'mmddYYYY',
                headers: {
                    0: { sorter: false },
                    1: { sorter: true},
                    2: { sorter: true },
                    3: { sorter: true },
                    4: { sorter: "shortDate", dateFormat: "ddmmyyyy" },
                    5: { sorter: true },
                    6: { sorter: false },
                    7: { sorter: false },
                    8: { sorter: false },
                    9: { sorter: false },
                    10: { sorter: false },
                    11: { sorter: false }

                }
            });
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您使用日期/时间格式,如mm/dd/yyyy hh:mm,请使用以下内容

$.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                        
            //21/04/2010 03:54 is the used date/time format 
            return /\d{1,2}\/\d{1,2}\/\d{1,4} \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.replace(/\//g," ");
            s = s.split(" ");                       
            return $.tablesorter.formatFloat(new Date(s[2], s[1]-1, s[0], s[3], s[4]).getTime());                                         
        },
        type: "numeric"} );
Run Code Online (Sandbox Code Playgroud)