在php中检查两次之间的给定时间并返回小时数

在php中检查两次之间的给定时间并返回小时数,php,datetime,time,Php,Datetime,Time,我想得到员工从晚上10点到早上6点的工作时间。我已搜索一个代码,以检查输入的时间是否介于两次之间: 我想检查我员工的上班时间是否在晚上10点到早上6点之间,并返回晚上10点到下午6点之间的小时数。在链接中,我尝试了,但返回了一个错误:调用boolean上的成员函数modify() 这是我尝试过的代码,我想使用date\u diff函数获取从晚上10点到早上6点的小时数。$schedule->time\u in是我的员工的时间,在我的代码示例中,我从$schedule->time\u in 下面是

我想得到员工从晚上10点到早上6点的工作时间。我已搜索一个代码,以检查输入的时间是否介于两次之间:

我想检查我员工的上班时间是否在晚上10点到早上6点之间,并返回晚上10点到下午6点之间的小时数。在链接中,我尝试了,但返回了一个错误:
调用boolean上的成员函数modify()

这是我尝试过的代码,我想使用
date\u diff
函数获取从晚上10点到早上6点的小时数。
$schedule->time\u in
是我的员工的时间,在我的代码示例中,我从
$schedule->time\u in

下面是我使用的链接中的函数,返回错误:

private 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);
}
我不想想出这样的办法:

$cola_in = "22:00";
$cola_out = "6:00";
$date1 = date("H:i",strtotime($schedule->time_in));                 
$date2 = date("H:i",strtotime($cola_in));                   
$date3 = date("H:i",strtotime($cola_out));
    if ($date1 > $date2 && $date1 < $date3) {
        $number_of_hours = $date1->diff($date3);
        print_r($number_of_hours);
    }       
$cola_in=“22:00”;
$cola_out=“6:00”;
$date1=日期(“H:i”,strottime($schedule->time_in));
$date2=日期(“H:i”,标准时间($cola_in));
$date3=日期(“H:i”,strottime($cola_out));
如果($date1>$date2&&$date1<$date3){
$number\u of_hours=$date1->diff($date3);
打印(小时数);
}       
如果
($schedule->time\u in==“4:00am”)
DateTime::createFromFormat(“!H:i”,“$schedule->time\u in”)将失败并返回
FALSE

这就解释了在布尔值上调用成员函数modify()的错误
,可能是由函数中的调用
$i->modify(“+1天”)
触发的

另一方面,如果
($schedule->time\u In==“4:00”)
错误应该消失


我希望这能有所帮助。

如果我理解正确;如果有人早上4点打卡上班,早上8点下班。那么你想让你的函数返回2?因为这就是他们从晚上10点到早上6点的工作时间吗?@DirkScholten是的。。那是it@DirkScholten类似于如果我有10pm和6am的输出,那么函数也应该返回8。我试图打印r($schedule->time\u in),结果如下:04:00:00你能解释一下为什么返回“1”整数值吗?我如何将04:00:00转换为“4:00”整数值。。顺便说一句,“4:00”是字符串值吗?您可以使用函数
var\u dump()
来确保数据类型,但它是字符串。如果您确定
$schedule->time\u的值,您可以使用
DateTime::createFromFormat(“!H:i:s”,“04:00:00”)
或使用函数
substr()
@Melvin截断字符串,我尝试过,但不理解函数的返回类型。你能给我解释一下这个函数的返回吗?
$cola_in = "22:00";
$cola_out = "6:00";
$date1 = date("H:i",strtotime($schedule->time_in));                 
$date2 = date("H:i",strtotime($cola_in));                   
$date3 = date("H:i",strtotime($cola_out));
    if ($date1 > $date2 && $date1 < $date3) {
        $number_of_hours = $date1->diff($date3);
        print_r($number_of_hours);
    }