Laravel 5时差

时间:2016-01-05 16:23:48

标签: php laravel eloquent laravel-5.1

我有一个应用程序,可以及时登录记录,并在签出记录时间。

我的桌子有IN_TIME& Out_time的

这些列中的数据示例:

IN_TIME = 16:06:46

OUT_TIME = 16:08:07

我有一个控制器,我的刀片模板文件显示给定人员的所有信息,我想要做的是显示两者之间的时差。

见下面我当前显示0的当前代码

**Time onsite:** {{ date('G:i', strtotime($attrec->out_time)) - date('G:i', strtotime($attrec->in_time)) }}

为什么我无法找到正确的数字?

2 个答案:

答案 0 :(得分:5)

您正在将时间戳转换为格式化字符串并尝试计算字符串之间的差异。相反,您应该计算每个datetotime(返回基本上为秒的UNIX时间戳)的结果之间的差异,然后格式化该结果:

{{ date('G:i', strtotime($attrec->out_time) - strtotime($attrec->in_time)) }}

您还可以通过执行以下操作来使用Carbon

{{ (new Carbon($attrec->out_time))->diff(new Carbon($attrec->in_time))->format('%h:%I') }}

这使用从DateTime继承的方法diff,它返回DateInterval个实例。 DateInterval::format的格式字符与date使用的格式字符不同。这就是格式化字符串%h:%I的原因,它等同于G:i

上面的代码将输出:

0:01

因为您选择格式化小时而没有前导零,并且两个时间戳之间的差异是一分钟(以及一些未显示的备用秒,因为它们未包含在格式化字符串中)。

答案 1 :(得分:0)

我可能错了,但可能在date的输出上未定义算术运算。我不熟悉PHP,但bash例如将应用" 0"的数值。任何不是你试图添加的数字的东西。所以,如果你做了

"hello" + 5

你得到5.在这种情况下,你有两个评估为0的对象给予0 + 0 = 0

问题Here解决了PHP中的时间算术问题。希望这将为您提供实现您想要的最佳方式!