@1233211

Как вычислить пересечение временных интервалов?

Есть массив
[{start: “11:00:00”, end: “13:00:00”}, {start: “15:00:00”, end: “17:00:00”}]

Нужно проверить есть ли пересечение времени в каком-то из объектов в массиве с промежутком, допустим с 9:00 до 10:00. Как так проверить? Видел, в momentjs есть функция isBetween, но не совсем понял можно и там работать с промежутком.
  • Вопрос задан
  • 2992 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const intervals = [
  { start: '11:00:00', end: '13:00:00' },
  { start: '15:00:00', end: '17:00:00' }
]
const findIntersection = (intervals, start, end) => 
  intervals.find(
    interval => start < interval.end && interval.start < end
  )

findIntersection(intervals, '09:00:00', '11:00:00')
// undefined
findIntersection(intervals, '09:00:00', '12:00:00')
// Object { start: "11:00:00", end: "13:00:00" }
Ответ написан
@Karpion
Пусть есть два объекта:
  1. start1:finish1
  2. start2:finish2
Оба времени переводим в линейный формат типа Unix-времени от начала эпохи; или не надо, если в языке есть функция сравнения времени (в ряде случаев можно сравнивать строки - для этого нужно, чтобы незначащие нули не пропускались). Далее просто:
if start1 <= finish2 and start2 <= finish1 then пересечение_есть else пересечения_нет
Возможно, знак равенства надо убрать - в зависимости, засчитывается ли пересечение интервалов в одной точке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы