编程语言
首页 > 编程语言> > javascript-使用tablesorter插件对时间hh:mm:ss进行排序

javascript-使用tablesorter插件对时间hh:mm:ss进行排序

作者:互联网

我正在使用tablesorter插件,并且有一列以hh:mm:ss格式排序.
排序器:“时间”不起作用.有没有一种方法可以对此列进行排序?
谢谢

我已经这样尝试过了,但它没有对列进行排序

ts.addParser({
id: "customDate",
is: function(s) {
    return false;        
},
format: function(s) {
    s = s.replace(/:/g," ");
    s = s.split(" ");
    return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2]).getTime()+parseInt(s[3]));
},
type: "numeric"

});

解决方法:

已经有一个用于表排序器的内置时间解析器,但它会查找“ AM”或“ PM”.

但是看来您需要使用计时器时间(hh:mm:ss或它所调用的任何东西)进行排序.

以下解析器代码看起来有些复杂,但应涵盖列仅包含秒(ss)或分钟&的情况.秒(mm:ss).

需要使用maxDigits设置,因为解析器基本上是在值上添加前导零以保持值的一致性,因此10:30:40变为010030040(当maxDigits设置为3时).

无论如何,here is a demo

$(function () {

    // change maxDigits to 4, if values go > 999
    // or to 5 for values > 9999, etc.
    var maxDigits = 3;

    $.tablesorter.addParser({
        id: "times",
        is: function (s) {
            return false;
        },
        format: function (s) {
            // prefix contains leading zeros that are tacked
            var prefix = new Array(maxDigits + 1).join('0'),
                // split time into blocks
                blocks = s.split(/\s*:\s*/),
                len = blocks.length,
                result = [];
            // add values in reverse, so if there is only one block
            // (e.g. "10"), then it would be the time in seconds
            while (len) {
                result.push((prefix + (blocks[--len] || 0)).slice(-maxDigits));
            }
            // reverse the results and join them
            return result.length ? result.reverse().join('') : s;
        },
        type: "text"
    });

    $('table').tablesorter({
        theme: 'blue',
        headers: {
            3: {
                sorter: 'times'
            }
        }
    });
});

我不确定这是否对您很重要,但是还有一个“持续时间”解析器可用于在时间后添加标签(例如10y 30d 6h 10m)-请参见this demo

标签:tablesorter,javascript
来源: https://codeday.me/bug/20191013/1909750.html