在PHP中减去两个不同的时间

时间:2011-05-05 02:12:14

标签: php date time

这似乎是一个相当简单的问题,但我遇到了麻烦!

在我的数据库中,我有两个有时间的字段。假设一个名为clockin的字段读取“2:29:39 pm”,另一个名为clockout的字段读作“2:29:39 pm”。

然后我还有另外两个领域,一个名为“breakin”,下午2:28:37,分组为“2:28:55 pm”。

我想从中断中减去突破以获得差异,然后取出该数字并从clockin和clockout之间的差值中减去它。

我该怎么做?这是我尝试过的:

$clockout = new DateTime($row['clockout']);
$clockin = new DateTime($row['clockin']);



$diff = $clockout->diff($clockin);

$on_the_clock = sprintf('%d hours, %d minutes, %d seconds', $diff->h, $diff->i, $diff->s);


$breakin = new DateTime($row['breakin']);
$breakout = new DateTime($row['breakout']);

$diff2 = $breakout->diff($breakin);
$break = sprintf('%d hours, %d minutes, %d seconds', $diff2->h, $diff2->i, $diff2->s);

这给了我两个不同,但后来我不知道如何从另一个中减去一个。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

根据您现有的代码判断我假设您正在运行PHP> 5.3使用DateTime类。

在哪种情况下退房DateTime->sub()。您可以使用它从时钟输出中减去中断返回的DateInterval。然后区分时钟时钟输出之间的区别。那会给你总的工作时间。

答案 1 :(得分:1)

我已经使用了strtotime()来解决这些问题。它以Unix时间戳的形式生成纯数值。我对DateTime()没有经验,但我更喜欢Unix时间戳,因为它代表秒数,如果需要,可以使用date()将其转换回字符串或用户友好格式。

我发现在数据库中存储Unix时间戳也更容易操作。在需要向用户显示之前,不需要用户友好的格式。

[http://php.net/manual/en/function.strtotime.php] [1]