我有一个时间变量(作为 CHAR(8) 存储在数据库中,因为当存储为 TIME 时会引发对象错误),我正在尝试对其进行格式化并用于计算与另一个时间的差异。
在此示例中,时间在数据库中存储为“06:00:00”,并分配给变量 $scheduled_start。
我还获取了另一个变量,如下所示。
然后我尝试创建一个 DateTime 对象。
$clockIn3 = new DateTime('1970-01-01 ' . $punches[$i]);
$clockIn4 = new DateTime('1970-01-01 ' . $scheduled_start);
然后我尝试找出差异:
$interval = $clockIn3->diff($clockIn4);
echo $interval->format('%H:%I:%S')
我得到了正确的格式:
分钟差异:00:04:04
但是当我尝试这个时,我得到了完全不同的结果。
$clockIn4->format('%H:%I:%S')
结果:
%06:%0:%st
我还需要检查 $clockIn3 和 $clockIn4 是否匹配,但我不明白我做错了什么?
问题源于您如何使用 format() 方法。当您调用 $clockIn4->format('%H:%I:%S') 时,您错误地使用了 % 符号,在这种情况下不需要这些符号。 DateTime::format() 方法不需要 % 来格式化参数,这与 DateInterval::format() 方法不同,后者是您用来格式化差异的方法。
使用 DateTime 对象时,从 format() 调用中删除 % 符号。
通过直接使用 == 运算符进行比较或使用 diff() 方法查看差异是否为零来检查两个 DateTime 对象之间是否相等。
试试这个:
// Create DateTime objects
$clockIn3 = new DateTime('1970-01-01 ' . $punches[$i]);
$clockIn4 = new DateTime('1970-01-01 ' . $scheduled_start);
// Get the difference
$interval = $clockIn3->diff($clockIn4);
echo "Difference Mins: " . $interval->format('%H:%I:%S');
// Format the $clockIn4 time
echo $clockIn4->format('H:i:s');
// Check if $clockIn3 and $clockIn4 match
if ($clockIn3 == $clockIn4) {
echo "Times match";
} else {
echo "Times do not match";
}
我希望有帮助。