PHP检查时间是否在两次之间,无论日期如何

use*_*817 3 php time

我正在编写一个脚本,我必须检查时间范围是否介于两次之间,无论日期如何.

例如,我有两个日期:

$from = 23:00
$till = 07:00
Run Code Online (Sandbox Code Playgroud)

我有以下时间检查:

$checkFrom = 05:50 
$checkTill = 08:00
Run Code Online (Sandbox Code Playgroud)

我需要创建一个脚本,如果检查值在$ from/$ till范围之间,则返回true.在此示例中,函数应返回true,因为$ checkFrom位于$ from/$ till范围之间.但以下情况也应如此:

$checkFrom = 22:00
$checkTill = 23:45
Run Code Online (Sandbox Code Playgroud)

Gla*_*vić 26

试试这个功能:

function isBetween($from, $till, $input) {
    $f = DateTime::createFromFormat('!H:i', $from);
    $t = DateTime::createFromFormat('!H:i', $till);
    $i = DateTime::createFromFormat('!H:i', $input);
    if ($f > $t) $t->modify('+1 day');
    return ($f <= $i && $i <= $t) || ($f <= $i->modify('+1 day') && $i <= $t);
}
Run Code Online (Sandbox Code Playgroud)

demo

  • 对于那些不知道感叹号含义的人:!将所有字段(年、月、日、小时、分钟、秒、分数和时区信息)重置为 Unix 纪元 如果没有 !,所有字段都将设置为当前日期和时间。参考:http://php.net/manual/en/datetime.createfromformat.php (3认同)