Tash1moto
@Tash1moto

Как можно вычесть свободные отрезки?

Всем привет.
Работаю со временем
Есть таймлайн и отрезки занятого времени.
Нужно из таймлайна вычесть свободные отрезки времени
Для наглядности отрисовал схему
618bdc2df417a774938813.png
отрезков c1, c2, c3 может быть множество.
Как можно это просчитать ?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
В общем виде решение — отсортировать по времени события переключения состояния (с занято на свободно и наоборот). Двигаться по времени, собирая начала-концы интересующих состояний.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tash1moto
@Tash1moto Автор вопроса
Написал работающий вариант
const timeline = {start: 100, end: 300 }
const offsets = []
const items = [
    { start: 235, end: 270 },
    { start: 135, end: 170 },
]
.sort((a,b) => {
    if(a.end > b.end) {
        return 1
    }
    if(a.end < b.end) {
        return -1
    }
    return 0
})
items.forEach((cur, index, arr) => {
    // Start
    if(index === 0) {
        offsets.push({
            start: timeline.start,
            end: timeline.start + cur.start - timeline.start
        })
    }
    // Middle
    if(arr[index+1]) {
        offsets.push({
            start: cur.end,
            end: cur.end + arr[index+1].start - cur.end
        })
    }
    // End
    if(index === arr.length - 1) {
        offsets.push({
            start: cur.end,
            end: timeline.end
        })
    }
})

console.log(offsets)
/*
Result:
[ { start: 100, end: 135 },
  { start: 170, end: 235 },
  { start: 270, end: 300 } ]
*/
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект