如何在不使用日期的情况下检查特定范围内的时间


PHP: how do check time within specific range without using date?

直接举个例子,因为我不擅长解释,并为此感到抱歉。比如你想检查具体时间是否在范围内?

sample range
- 20:00 - 05:00
result : 
  - 19:59 is false
  - 21:00 is true
  - 00:00 is true
  - 04:00 is true
  - 05:01 is false
- 07:00 - 16:00
result :
  - 06:59 is false
  - 09:00 is true
  - 12:00 is true
  - 16:01 is false

没有日期就很难比较时间。您也应该传递日期,否则无法验证例如04:00。下面是代码:

function in_time_range($start, $end, $check)
{
    $start = new DateTime($start);
    $end = new DateTime($end);
    $check = new DateTime($check);
    return $check >= $start && $check <= $end;
}
var_dump(in_time_range('25-08-2016 20:00:00', '26-08-2016 05:00:00', '25-08-2016 21:00:00')); // true
var_dump(in_time_range('25-08-2016 20:00:00', '26-08-2016 05:00:00', '26-08-2016 06:00:00')); // false
编辑:

以防万一——如果你给出的是不同日子的时间,这是不可能的。你的例子是22:0005:00,所以我假设你是在比较两个不同日子的时间。

如果要比较同一天的时间,则完全可以使用以下代码:

function in_time_range($start, $end, $check)
{
    $start = new DateTime($start);
    $end = new DateTime($end);
    if ($end < $start) {
        $tmp = $start;
        $start = $end;
        $end = $tmp;
        unset($tmp);
    }
    $check = new DateTime($check);
    return $check >= $start && $check <= $end;
}
var_dump(in_time_range('20:00', '05:00', '19:00')); // true
var_dump(in_time_range('20:00', '05:00', '04:00')); // false

这是PHP的代码和逻辑,其实很简单

<?php
echo "<pre>";
$startPush = "22:00";
$endPush = "17:30";
for($i = 0;$i < 24;$i++){
    $hour = str_pad($i, 2, "0", STR_PAD_LEFT);
    $timeNow = "{$hour}:00";
    $isOK = ($startPush <= $timeNow and $endPush >= $timeNow);
    if ($startPush > $endPush) {
        $bigTime = ($startPush <= $timeNow and "24:00" >= $timeNow);
        $litTime = ("00:00" <= $timeNow and $endPush >= $timeNow);
        $isOK = ($bigTime or $litTime);
    }
    echo "{$timeNow} is ".($isOK ? "PASS" : "ERROR")."<br>";
}
结果

00:00 is PASS
01:00 is PASS
02:00 is PASS
03:00 is PASS
04:00 is PASS
05:00 is PASS
06:00 is PASS
07:00 is PASS
08:00 is PASS
09:00 is PASS
10:00 is PASS
11:00 is PASS
12:00 is PASS
13:00 is PASS
14:00 is PASS
15:00 is PASS
16:00 is PASS
17:00 is PASS
18:00 is ERROR
19:00 is ERROR
20:00 is ERROR
21:00 is ERROR
22:00 is PASS
23:00 is PASS
相关文章: