Выбрать свободные промежутки времени

Mastekor

Новичок
Выбрать свободные промежутки времени

Добрый день, подскажите пожалуйста, как такое можно реализовать?

Пишу небольшой скриптик своих задач (похоже на календарь)

Есть дата начала работы и окончания.
Например:
2007-06-16 10:30:00 2007-06-16 12:50:00
2007-06-16 13:00:00 2007-06-16 13:40:00
2007-06-16 15:00:00 2007-06-16 16:30:00
2007-06-16 17:00:00 2007-06-16 18:00:00

Допустим, я хочу поставить себе ещё одно задание на эту же дату на 14:00 (время работы 1.5 часа),
Как мне проверить, что у меня между заданиями есть такой промежуток времени и не получиться наслоения?

З.Ы. Просьба помочь не кодом, и идей, направлением, вообщем советом.
Заранее всем спасибо.
 

Bitterman

Новичок
Использовать БД. Задача решается, ИМХО, одним запросом с хитрым условием.
 

С.

Продвинутый новичок
Любая дата переводится в unix-секунды. Проверить промежутки между натуральными числами сможешь?
 

Mastekor

Новичок
Все в БД. Храниться в unix.
(1)2007-06-16 10:30:00 (2)2007-06-16 12:50:00
(3)2007-06-16 13:00:00 (4)2007-06-16 13:40:00
(5)2007-06-16 15:00:00 (6)2007-06-16 16:30:00
(7)2007-06-16 17:00:00 (8)2007-06-16 18:00:00

Мне получается надо из времени 3 вычесть время 2.

З.Ы. А разве такое можно одним запросом вынуть?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
З.Ы. А разве такое можно одним запросом вынуть?
Конечно
(1-a)2007-06-16 10:30:00 (1-b)2007-06-16 12:50:00
(2-a)2007-06-16 13:00:00 (2-b)2007-06-16 13:40:00
(3-a)2007-06-16 15:00:00 (3-b)2007-06-16 16:30:00
(4-a)2007-06-16 17:00:00 (4-b)2007-06-16 18:00:00
(c-1)2007-06-16 14:00:00 (c-2)2007-06-16 15:30:00

Пересечение
(c-2)<(a) AND (c-1)>(b)

или
BETWEEN
правда нужно учесть что БитВин это >= <=
 

Андрейка

Senior pomidor developer
>UNIX_TIMESTAMP()
а DATETIME уже не вычитаются?

Пересечение
(c-2)<(a) AND (c-1)>(b)

ща аффтор вопроса воплотит это в код и надо будет попорсить заценить.. как-то оч хитро прям с помощью BetWeen получилось в теории
 

Bitterman

Новичок
Что-то я не догоняю, что мы будем получать по этому условию? Оно, по-моему, вообще никогда не выполнится. Надо найти все задачи, которые пересекаются с добавляемой. Для этого надо проверить 3 условия: а между с1 и с2, b между с1 и с2 и а<c1, а b>c2. Как-то так...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Андрейка
Пересечение
(c-2)<(a) AND (c-1)>(b)
Я не те поля поставил для псевдокода.


Запрос вида
SELECT * FROM table WHERE start_time_field<'2007-06-16 15:30:00' AND end_time_field>'2007-06-16 14:00:00'
 

Trianon

Новичок
как-то оч хитро прям с помощью BetWeen получилось в теории
Я реализовывал такую штуку....
От between пришлось отказаться.
Из-за того, что у него оба конца диапазона закрытые.
 
Сверху