php DateTime 格式不正确

问题描述 投票:0回答:1

我有一个时间变量(作为 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 是否匹配,但我不明白我做错了什么?

php datetime format diff
1个回答
0
投票

问题源于您如何使用 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";
}

我希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.