Tablesorter错误地订购日期和空日期

时间:2014-04-06 22:31:10

标签: date tablesorter

我的tablesorter表没有正确排序日期和空字段。

我希望将空字段视为零,并将其分组在顶部/底部。相反,我在它们下面会有一些日期。

$('table').tablesorter({
    widthFixed: true,
    // sort on the last name in ascending order
    sortList: [
        [2, 0]
    ],
    dateFormat: "ddmmyyyy",
    emptyTo: "zero",
    sortInitialOrder: "desc",
    headers: {
        3: {
            sorter: "shortDate"
        },
        4: {
            sorter: "shortDate"
        },
        5: {
            sorter: "shortDate"
        },
        6: {
            sorter: "shortDate"
        }
    },
    textExtraction: {
        3: function (n, t, c) {
            return $(n).attr('data-date');
        },
        4: function (n, t, c) {
            return $(n).attr('data-date');
        },
        5: function (n, t, c) {
            return $(n).attr('data-date');
        }
    },
    widgets: ['zebra', 'columns']
});

查看小提琴here。使用“出生日期”排序'列。

1 个答案:

答案 0 :(得分:1)

“shortDate”解析器将所有日期转换为以毫秒为单位的时间,以进行日期比较(使用运算符或日期范围与过滤器小部件)并更轻松地排序日期。为此,它使用了javascript函数getTime()

  

getTime方法返回的值是自1970年1月1日00:00:00 UTC以来的毫秒数。

因此,您注意到的问题是因为非日期单元格被视为具有零值,而未正确排序的日期是日期“1/1/1930”。在javascript控制台中输入此日期,您将看到以下结果:

new Date('1/1/1930').getTime()
// returns -1262282400000

请记住,这是自1970年1月1日以来的时间,所以时间会返回一个负数,当然小于零。

最简单的解决方案是将emptyTo选项设置为"min",将任何空单元格的值设置为最大负数(demo):