DataTables - фильтрация на основе промежутка времени - PullRequest
0 голосов
/ 08 мая 2018

У меня есть столбец с данными в таблицах данных, как показано ниже:

0500-1300
0500-1430
0600-0915
0600-1000
0600-1100
0600-1115
0600-1130
0600-1200
0600-1215
0600-1300
0600-1315

Я бы хотел, чтобы фильтр не слишком отличался от http://yadcf -showcase.appspot.com / dom_bootstrap_time.html , где кто-то может выбрать время ОТ и время ТО, которое затем отфильтрует данные.

Допустим, скажем, кто-то выбирает:

FROM: 0600
TO: 1100

Тогда будет показано только 3. Однако, если я выбрал:

FROM: 0500
TO: 1400

Все бы показать. Это возможно? Будет ли плагин с сайта выше, что я после?

1 Ответ

0 голосов
/ 08 мая 2018

Попробуйте это:

const timeStringToInt = (time) => {
  const hoursMinutes = time.split(/[.:]/);
  const hours = parseInt(hoursMinutes[0], 10) * 60;
  var minutes = parseInt(hoursMinutes[1], 10);
  return hours + minutes;
}

$.fn.dataTable.ext.search.push(
  (settings, data, dataIndex) => {
    const min = timeStringToInt($('#timeFrom').val());
    const max = timeStringToInt($('#timeTo').val());
    const start = timeStringToInt(data[0]);
    const end = timeStringToInt(data[1]);
    return start >= min && end <= max;
  }
);

Возможно, вам придется изменить свою функцию в зависимости от положения часовых столбцов. Работает JSFiddle здесь .

EDIT

Посмотрев немного на ваши данные, я допустил ошибку в своем первоначальном ответе, это должно сделать это:

const timeStringToInt = (time) => {
  const hoursMinutes = time.split(":");
  const hours = parseInt(hoursMinutes[0], 10) * 60;
  var minutes = parseInt(hoursMinutes[1], 10);
  return hours + minutes;
}
const stringToInt = (time) => {
  var minutes = parseInt(time.slice(-2), 10);
  const hours = parseInt(time.slice(0, -2), 10) * 60;
  return hours + minutes;
}

$.fn.dataTable.ext.search.push(
  (settings, data, dataIndex) => {
    const min = timeStringToInt($('#timeFrom').val());
    const max = timeStringToInt($('#timeTo').val());
    const timeParts = data[0].split("-");
    const start = stringToInt(timeParts[0]);
    const end = stringToInt(timeParts[1]);
    return start >= min && end <= max;
  }
);

Обновлен JSFiddle здесь .

Надеюсь, это поможет: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...