У меня есть таблица с именем library_timing, которая содержит 2 библиотеки с днями и временем в эти дни
id Library_id name Days Open_time Close_time
1 1 Library1 Monday 9:00:00 18:00:00
2 1 Library1 Tuesday 9:00:00 18:00:00
3 1 Library1 Wednesday 9:00:00 18:00:00
4 1 Library1 Thursday 00:00:00 00:00:00
5 1 Library1 Friday 9:00:00 18:00:00
6 2 Library2 Monday 9:00:00 18:00:00
7 2 Library2 Tuesday 9:00:00 18:00:00
8 2 Library2 Wednesday 9:00:00 18:00:00
9 2 Library2 Thursday 00:00:00 00:00:00
10 2 Library2 Friday 9:00:00 18:00:00
Теперь я хочу рассчитать, когда библиотека откроется на следующий день, следуя 3 правилам
- Если текущее время находится между open_time и close_time, тогда следующее время открытия равно нулю
- Если магазин закрыт, т.е. текущее время> close_time, то следующее время открытия должно быть временем открытия следующих дней с указанием даты в форме эпохи
- Если магазин закрыт, т.е. текущее время> close_time, а следующий день - выходной, то следующим временем открытия должно быть время открытия следующих дней с датой после выходного в форме эпохи. https://www.epochconverter.com/
Ожидаемый результат
Senario 1: примите во внимание текущую дату, время - 28 мая 2020 г., 15:00:00, и возьмите ввод как id 1 из таблица, то вывод должен быть
| NextOpeningTime|
-------------------
| 0 |
Senario 2: считайте, что текущая дата и время - 28 мая 2020 года 19:00:00, и принимайте входные данные как id 2 из таблицы n время моего следующего открытия магазина должно быть временем и датой открытия id 3, т.е. 29 мая 2020 9:00:00, но в эпоху
| NextOpeningTime|
-------------------
| 1590723000 |
Senario 3: Senario 2: Считайте, что текущая дата - 28 мая 2020 19:00:00 и примите ввод как id 3 из таблицы, тогда мое следующее время открытия магазина должно быть временем и датой открытия id 5, то есть 30 мая 2020 года 9:00:00, но в эпоху
| NextOpeningTime|
-------------------
| 1590809400 |
Я ПРОБИРАЛ ЭТОТ КЕЙС В MYSQL, НО НЕ РАБОТАЕТ
case when (curtime() - close_time) > (curtime() - open_time)
and curtime() not between open_time and close_time
then
UNIX_TIMESTAMP( subtime(curtime() , close_time))
when (curtime() - close_time) < (curtime() - open_time)
and curtime() not between open_time and close_time then
UNIX_TIMESTAMP(addtime(subtime( open_time, curtime()), "24:00:00"))
when open_time = "00:00:00" and close_time = "00:00:00" or (open_time is null and close_time is null) then
UNIX_TIMESTAMP(addtime(subtime((select open_time from library_timing where day IN (DAYNAME(CURDATE() + 1))), curtime()), "24:00:00"))
else
" 0"
end "nextopeningtime",