首页 > 解决方案 > Tabulator 的“时间”排序器无法以 hh:mm:ss 格式正确排序

问题描述

我已经加载了 moment.js 并且 datetime 排序工作 - 这似乎需要一个格式化程序和一个排序器 FWIW。但是对于“时间”排序,我只是试图让数据以这种格式的字符串形式出现:

“hh:mm:ss”

然后,使用“时间”排序器,我这样配置它:

{'field': 'wall_time', 'title': 'wall_time', 'sorter': 'time', 'sorterParams': {'format': 'hh:mm:ss'}}

问题是,我得到不正确的排序顺序:

坏时间排序截图

有什么办法可以进一步调试吗?

附录:请注意,我的列和行是在 Ajax 调用中创建表后加载的 - 这可能会对排序行为产生影响:

  table.setColumns(response.cols);
  table.setData(response.rows);

标签: tabulator

解决方案


因为您的时间不是有效时间,所以它们不能转换为标准的 24 小时时间。内置分拣机不适合您。你必须创建你自己的。您可以在此处阅读有关自定义排序器的更多信息, http: //tabulator.info/docs/4.6/sort#func

这是我相信对你有用的东西。 https://jsfiddle.net/nrayburn/6wygod1c/29/

一般的想法是更改您的列以使用您的自定义排序器。创建一个自定义排序器,返回被比较的两个值之间的差异。

  {
    field: 'time',
    name: 'Time',
    sorter: customSorter
  }

function customSorter(a, b){
    const aArray = a.split(':');
    const bArray = b.split(':');
    let diff = 0;
    for (let i = 0; i < 3; i++){
        if (aArray[i] !== bArray[i]){
            diff = bArray[i] - aArray[i];
            break;
        }
    }
    return diff;
}

因为这使用了自定义排序器,所以您不再需要包含 moment.js。


推荐阅读