Сортировщик "времени" табулятора неправильно сортирует в формате чч: мм: сс - PullRequest
0 голосов
/ 05 мая 2020

У меня есть момент. js загружено и работает сортировка по дате и времени - для этого, похоже, требуется как средство форматирования, так и сортировщик FWIW. Но для сортировки «по времени» я просто пытаюсь ввести данные в виде строк в следующем формате:

«чч: мм: сс»

А затем, используя «время» сортировщик, я настраиваю его так:

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

Проблема в том, что я получаю неправильный порядок сортировки:

Bad time sort screenshot

Есть ли способ отладки этого дальше?

Дополнение: обратите внимание, что мои столбцы и строки загружаются после создания таблицы в вызове Ajax - это может повлиять на поведение сортировки:

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

1 Ответ

2 голосов
/ 05 мая 2020

Поскольку ваше время недействительно, его нельзя преобразовать в стандартное 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;
}

Поскольку здесь используется настраиваемый сортировщик, вам больше не нужно включать момент. js.

...