如何确定HH:MM的当前时间是否在两个间隔HH:MM-HH:MM

时间:2019-11-25 17:58:11

标签: php mysql

数据库中有两个日期,开始日期(HH:MM)和结束日期(HH:MM),例如07:00(打开)-20:00(关闭)或07:00-03:00

在以下时间段内正确确定日期是必要的:

示例:

有一家机构在07:00开放,在23:00闭馆,现在20:00,您怎么知道该机构现在是开放的?

或者在07:00开放,在第二天03:00(现在第二天20:00)关闭

或者在22:00开放,在第二天07:00关闭,现在是02:00

或者在22:00开放,在第二天07:00(第二天)关闭

2 个答案:

答案 0 :(得分:2)

检查此查询。 @now仅用于测试。您必须稍后将其更改为NOW()

这里是sample

SELECT @now := '14:00:01';

SELECT *,
  if( open_time < close_time
     , if( @now >= open_time and @now <= close_time , 'in period' , 'out period')
     , if( @now >= open_time or @now <= close_time , 'in period' , 'out period'))
as period
FROM docs;

答案 1 :(得分:1)

您有两种情况:

情况一:opening_time < closing_time(全天开放)

情况二:opening_time > closing_time(通宵开放)

对于这两种情况,您需要不同的条件。

第一种情况:

current_time() > opening_time AND current_time() < closing_time

第二种情况:

current_time() > opening_time OR current_time() < closing_time

现在将这些案例及其相应的条件合并为一条语句:

(opening_time < closing_time) AND (current_time() > opening_time AND current_time() < closing_time)
OR
(opening_time > closing_time) AND (current_time() > opening_time OR  current_time() < closing_time)

由于第一个条件现在处于冗余状态,因此可以将其删除。您的最终查询将是:

SELECT 
    (current_time() > opening_time AND current_time() < closing_time)
    OR
    (opening_time > closing_time) AND (current_time() > opening_time OR current_time() < closing_time)
    AS is_open_now
FROM your_table
-- your WHERE condition here

这是纯布尔逻辑。但是,处理不同情况的另一种方法是使用CASE表达式:

SELECT 
  CASE WHEN opening_time < closing_time
    THEN current_time() > opening_time AND current_time() < closing_time
    ELSE current_time() > opening_time OR  current_time() < closing_time
  END AS is_open_now
FROM your_table
-- your WHERE condition here