Php 显示从X小时到Y小时的警报

Php 显示从X小时到Y小时的警报,php,Php,嗨,我想显示从X小时到Y小时的警报 我有: $currday = date('l'); $starting_hour = DB::table('time')->select('starting_hour')->where('day' == $currday)->get(); $ending_hour = DB::table('time')->select('ending_hour')->where('day' == $currday)->g

嗨,我想显示从X小时到Y小时的警报

我有:

  $currday = date('l');
    $starting_hour = DB::table('time')->select('starting_hour')->where('day' == $currday)->get();
    $ending_hour = DB::table('time')->select('ending_hour')->where('day' == $currday)->get();
    $currhour = date('H')

    if($currhour > $starting_hour || $currhour < $ending_hour)
       return 'yes alert';
    else
       return 'no alert';
如果我正在使用

if($currhour >= 16 || $currhour <= 22)
=>不正常,因为我想在下午16点到凌晨5点之间显示消息,现在是4<16

案例2:

$starting_h = 16;
$ending_h = 5;
$currenthour = 4;

  if($currhour >= 16 || $currhour <= 5)
$starting_h = 16;
$ending_h = 5;
$currenthour = 4;

if($currhour >= 16 && $currhour <= 5)
$starting_h=16;
$end_h=5;
$currenthour=4;

如果($currhour>=16&&$currhour您需要使用
&&
而不是
|

$currhour = date('H')

if($currhour > 18 && $currhour < 22)
    return 'yes alert';
else
    return 'no alert';
$currhour=日期('H')
如果($currhour>18&$currhour<22)
返回“是警报”;
其他的
返回“无警报”;

您可以比较配置的开始时间和结束时间,以确定上午的时间是否可以接受

$currhour = date('H');


if(($ending_hour > $starting_hour && ($currhour > $starting_hour && $currhour < $ending_hour)) || ($starting_hour > $ending_hour && ($currhour > $starting_hour || $currhour < $ending_hour)))
    return 'yes alert';
else
    return 'no alert';
$currhour=日期('H');
如果($ending_hour>starting_hour&($currhour>starting_hour&$currhour<$ending_hour))|($starting_hour>ending_hour&($currhour>starting_hour |$currhour<$ending_hour)))
返回“是警报”;
其他的
返回“无警报”;

您应该先检查开始时间和结束时间

$currhour = date('H')
$start = 18;
$end = 9;

if($start < $end &&  $currhour > $start && $currhour < $end)
   return 'yes alert';
else if ($start > $end) {
   if ($currhour < $start && $currhour > $end)
      return 'no alert';
   else
      return 'yes alert';
} 
else
   return 'no alert';
$currhour=日期('H')
$start=18;
$end=9;
如果($start<$end&&$currhour>$start&&$currhour<$end)
返回“是警报”;
else if($start>$end){
如果($currhour<$start&$currhour>$end)
返回“无警报”;
其他的
返回“是警报”;
} 
其他的
返回“无警报”;
如果你想把它包装成一个函数,你甚至可以把它缩短到下面

function showAlert($start, $end)
{
    $currhour = date('H')

    if($start < $end &&  $currhour >= $start && $currhour <= $end)
        return 'yes alert';
    else if ($start > $end) {
        if ($currhour > $start && $currhour < $end)
            return 'yes alert';
    }

    return 'no alert';
}

showAlert(18, 9);
函数showAlert($start,$end)
{
$currhour=日期('H')
如果($start<$end&&$currhour>=$start&&$currhour$end){
如果($currhour>$start&&$currhour<$end)
返回“是警报”;
}
返回“无警报”;
}
showarert(18,9);

@lan我已经编辑了我看到的帖子……但问题仍然存在……因为11<22@Argift65,这没关系,因为两个条件之间存在
&
。因此,只有当当前小时数大于18且小于22时,您才会收到“是警报”。@walther,如果我将22改为5,currhour等于4:00:00,我该怎么办因为现在是下午4点morning@Argift65,再次强调,如果您需要确定当前小时是否在给定的时间间隔内,则需要使用
&&
,否则它将无法工作。此外,我不太明白问题所在。这是一个相当简单的场景。如果您在找到正确的算法时遇到问题,请后退一步然后从更基本的问题开始,试着找到一个解决方案。@walther问题是当..我在第二天..因为如果当前时间为2..开始时间为18小时,结束时间为5..将显示“无警报”;…在值18,22等处思考…它将是动态的。我总是需要比较..currhour>开始日期currhour<结束日期。您可以然后在会话中删除前面的值,不是吗?@Carols Alexandre。我已经编辑了我的帖子。所以我的时间间隔需要像示例中那样是动态的。我有一个管理面板,我将在其中更改开始时间和结束时间。你能解释一下你的想法吗?第一个条件意味着同一天的开始和结束时间,second表示在2天内完成,条件($currhour<$start&&$currhour>$end)表示现在不是警报时间(检查无警报也更容易)。我画了一条线来查找条件,这将很容易理解。我只是找到一个简单的方法,但如果你想这样做,我想提示是“使用timestame”来获取更多条件
$currhour = date('H')
$start = 18;
$end = 9;

if($start < $end &&  $currhour > $start && $currhour < $end)
   return 'yes alert';
else if ($start > $end) {
   if ($currhour < $start && $currhour > $end)
      return 'no alert';
   else
      return 'yes alert';
} 
else
   return 'no alert';
function showAlert($start, $end)
{
    $currhour = date('H')

    if($start < $end &&  $currhour >= $start && $currhour <= $end)
        return 'yes alert';
    else if ($start > $end) {
        if ($currhour > $start && $currhour < $end)
            return 'yes alert';
    }

    return 'no alert';
}

showAlert(18, 9);