Вхождение времени во время с выборкой большего

kelvin2

Новичок
Добрый вечер!

Подскажите как правильно реализовать:

дается 2 временных диапазона, например, 05:00 - 21:00 и 11:30 - 14:30.
Нужно определить БОЛЬШЕЕЕ возможное конечное время в любом из них. Т.е. на примере выше должно получится 14:30. Или пример 00:00 - 15:30 и 18:00 - 23:30, здесь не будет попадания в диапазон.

Весь вечер голову ломаю, но решения не могу придумать :)
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
дается 2 временных диапазона, например, 05:00 - 21:00 и 11:30 - 14:30.
Нужно определить БОЛЬШЕЕЕ возможное конечное время в любом из них. Т.е. на примере выше должно получится 14:30. Или пример 00:00 - 15:30 и 18:00 - 23:30, здесь не будет попадания в диапазон.
Ну, у тебя проблема с формулированием вопроса, не то что с решением. Давай начнём с того как пробоавал, функции для работы с датой-временем какие знаешь?
 

kelvin2

Новичок
Ну, у тебя проблема с формулированием вопроса, не то что с решением. Давай начнём с того как пробоавал, функции для работы с датой-временем какие знаешь?
пробовал перебором всех значений > и <, но как оказалось не так уж просто определить все условия. Для сравнивания приводил значения времени к (int), т.е. если время было 04:30, то к (int) получается 430. timestamp, думаю, здесь не совсем целесообразно использовать
 

artoodetoo

великий и ужасный
Давай на некоторое время абстрагируемся от типа данных.
Насколько я понимаю, твоя задача: найти пересечение двух диапазонов значений и, если пересечение есть, взять из него макс. значение в пределах пересечения.

(a1, a2) и (b1, b2) пересекаются если:
наглядное условие
(a1 >= b1 && a1 <= b2) || (b1 >= a1 && b1 <= a2) // на SQL здесь удобно сделать BETWEEN
или оптимизированное условие
(b1 <= a2) && (b2 >= a1)

если проверка прошла, берешь min(a2, b2) - да вот так, на словах "максимум", а арифметически "минимум от двух конечных значений"
 
Последнее редактирование:
Сверху