[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Операции с диапазоном времени
goodwin74
Здравствуйте форумчане! Есть проблема, над которой думаю, и не могу придти к решению.

Перейду сразу к делу, если есть мысли, а особенно если примерное решение, то прошу подсказать.

Есть данные - это промежуток времени. Например: от 9:00 до 17:00
Допустим план занятости дня. С 9 до 17 это промежуток, куда можно добавить занятие у которого есть свой промежуток в течение которого длится это занятие.

Теперь необходимо добавить что с 12 до 13 это обед. Получается теперь два промежутка времени свободные для добавления задания- это с 9 до 12 и с 13 до 17.
Дальше подобны образом добавляются другие занятия ( поход в магазин, на совещание и тд).

Теперь собственно вопрос, как лучше реализовать такую систему операций с временем, и хранение данных (промежутков времени). Естественно перед созданием занятия, проверять доступен ли этот промежуток времени или промежуток уже входит в занятое время(например если занятие добавляется в промежутке от 11 до 13, когда с 12 до 13 уже установлен обед).
inpost
самое простое иметь 2 значения: начало, конец.
Тогда как при добавлении нового ты всегда сможешь проверить, не пересекаются ли они. Новое начало не должно быть > старого начала И < старого конца. smile.gif Думаю суть передал.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
AllesKlar
inpost
Ну, там немного больше граблей.

goodwin74
Нарисуй на листке в виде графиков со всеми возможными вариантами, понятнее станет

У меня подобное реализовано следующим образом:
В базе:
таблица рабочего времени:
begin_time (time) // время открытия
end_time (time) // время закрытия
begin_lunch_time (time) // начало обеда
end_lunch_time (time) // конец обеда

//если begin_time == end_time, то закрыто
//если begin_lunch_time == end_lunch_time, то обеда нет


Таблица событий
event_begin_time (time)
event_end_time (time)


Далее для события, имеем время начала и время окончания (php $new_event_begin_time $new_event_end_time)
1. (sql) Запрос из базы расписания для данного дня (отдела, филиала...)
2. (php) Проверяем вписывается ли событие в рабочее время (длинное сравнение, проверить чтобы было рабочее время и начало и конец времени события попал в промежуток И (нет обеда ИЛИ (ни начало события ни конец события не попали в промежуток между началом и концом обеда И начало и конец события не "окружили" время обеда) ) )
3. (sql) Запрос из базы всех событий, время окончания которых БОЛЬШЕ, чем время начала нового события и время начала которых МЕНЬШЕ, чем время окончания нового события.
Если запрос вернул пустой результат, то промежуток свободен, и туда можно писать событие (в Таблицу событий добавили новую запись).

_____________
[продано копирайтерам]
goodwin74
AllesKlar
Благодарю за такие подробности! Можно сказать подали уже готовое решение. Теперь есть представление о решение хорошее.
Еще раз благодарю!
AllesKlar
goodwin74
Рисуй smile.gif Всегда рисуй. Даже, если на первый взгляд пустяковое дело.
У меня на стене вообще доска висит и маркеры. Я порой такой Пикасо, что жуть просто smile.gif
Потом сяду на диванчик напротив, посмотрю и подумаю... ну и фигню же нарисовал... smile.gif

_____________
[продано копирайтерам]
goodwin74
AllesKlar
спасибо за совет учту smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.