Php 两个时间段之间的差异导致错误

Php 两个时间段之间的差异导致错误,php,time,timestamp,date-difference,Php,Time,Timestamp,Date Difference,我有这种情况,我想计算一个员工的迟到时间,要得到迟到时间,我需要减去时间,得到一个员工迟到的分钟/小时 假设是。。我有以下代码: $time = strtotime($time_in); $late_time = date("H:i", strtotime('+15 minutes', $time)); if(date("H:i:s",strtotime($time_duty[0]->time)) > $late_time ) {

我有这种情况,我想计算一个员工的迟到时间,要得到迟到时间,我需要减去时间,得到一个员工迟到的分钟/小时

假设是。。我有以下代码:

$time = strtotime($time_in);        
$late_time = date("H:i", strtotime('+15 minutes', $time));  

if(date("H:i:s",strtotime($time_duty[0]->time)) > $late_time ) {                
        $time_difference = (date("H:i:s",strtotime($time_duty[0]->time)) - $late_time)/60;
        print_r($time_difference);          
}
然后我遇到了错误

消息:遇到格式不正确的数值

请尝试以下操作:

$time = strtotime($time_in);    
$datetime1 = new DateTime(date("H:i:s",strtotime($time_duty[0]->time)));
$datetime2 = new DateTime(date("H:i:s", strtotime('+15 minutes', $time)));
$interval = $datetime1->diff($datetime2);
echo $interval->format('H:i:s');
试试这个:

$time = strtotime($time_in);    
$datetime1 = new DateTime(date("H:i:s",strtotime($time_duty[0]->time)));
$datetime2 = new DateTime(date("H:i:s", strtotime('+15 minutes', $time)));
$interval = $datetime1->diff($datetime2);
echo $interval->format('H:i:s');

你收到这封信是因为这条线

$time_difference = (date("H:i:s",strtotime($time_duty[0]->time)) - $late_time)/60;
截至,当您尝试对非格式良好的字符串(如日期)执行算术运算时,您将收到此通知

 $time_difference = "2019-09-14" - "2019-09-13"; // <--- Notice as of PHP7.1
如果有机会的话,我更喜欢使用时间戳创建DateTime对象,因为它可以将您从地狱般的时区中解放出来。请从列表中查看此注释

当 $time参数是UNIX时间戳(例如@946684800)或 指定时区(例如2010-01-28:15:00:00+02:00)


你收到这封信是因为这条线

$time_difference = (date("H:i:s",strtotime($time_duty[0]->time)) - $late_time)/60;
截至,当您尝试对非格式良好的字符串(如日期)执行算术运算时,您将收到此通知

 $time_difference = "2019-09-14" - "2019-09-13"; // <--- Notice as of PHP7.1
如果有机会的话,我更喜欢使用时间戳创建DateTime对象,因为它可以将您从地狱般的时区中解放出来。请从列表中查看此注释

当 $time参数是UNIX时间戳(例如@946684800)或 指定时区(例如2010-01-28:15:00:00+02:00)


您正在减去格式不正确的数值
H:i
您正在减去格式不正确的数值
H:i
很好的解决方案,请投赞成票。但他只是计算了一个时间范围,所以这不会在实际中产生任何影响。@SergheileOnneco谢谢,伙计,这实际上不是一个解决方案,我只是解释了错误的原因,你的回答提供了解决方案“所以这不会在实际中产生任何影响”。。。我没有得到@SergheiLeonenco,这将按预期工作,这只是创建对象的一种不同方式,一旦创建了对象,您就可以使用
->diff
,就像您在代码中所做的那样。我同意,您的建议很容易阅读,而且效果也很好。这不是
新的日期时间($time\u duty[0]->time)与时间戳相同?很好的解决方案,请投票。但他只是计算了一个时间范围,所以这不会在实际中产生任何影响。@SergheileOnneco谢谢,伙计,这实际上不是一个解决方案,我只是解释了错误的原因,你的回答提供了解决方案“所以这不会在实际中产生任何影响”。。。我没有得到@SergheiLeonenco,这将按预期工作,这只是创建对象的一种不同方式,一旦创建了对象,您就可以使用
->diff
,就像您在代码中所做的那样。我同意,您的建议很容易阅读,而且效果也很好。这不是
新的日期时间($time\u duty[0]->time)与时间戳相同?