Tabulator 的 "time" 排序器无法按照 hh:mm:ss 格式正确排序

Tabulator's "time" sorter doesn't sort correctly with hh:mm:ss format

我已经 moment.js 加载和日期时间排序工作 - 这似乎需要格式化程序和排序程序 FWIW。但是对于 "time" 排序,我只是试图让数据以这种格式的字符串形式出现:

"hh:mm:ss"

然后,使用 "time" 分拣机,我这样配置它:

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

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

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

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

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

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

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

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

  {
    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。