两次之间的差异导致错误

Difference between two time resulting an error

我有这种情况,我想计算一个员工的迟到时间并得到迟到时间,我需要减去时间来得到一个员工的minute/hour迟到时间。

假设是..我有这个代码:

$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_difference = (date("H:i:s",strtotime($time_duty[0]->time)) - $late_time)/60;

PHP 7.1 开始,当您尝试对格式不正确的字符串(例如您的日期)进行算术运算时,您会收到此通知

 $time_difference = "2019-09-14" - "2019-09-13"; // <--- Notice as of PHP7.1

你为什么要像这样减去日期字符串?您应该按照先前答案的建议使用 rich class DateTime() 来计算差异。您也可以通过这种方式创建对象

$datetime1 = new DateTime( "@" . strtotime($time_duty[0]->time));
$datetime2 = new DateTime( "@" . strtotime('+15 minutes', $time));

如果有机会,我更喜欢使用时间戳创建 DateTime 对象,因为它会让您摆脱时区的困扰。从 manual

查看此注释

The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).