2016-01-05 59 views
2

我有一个应用程序,它在登录记录的时间和注销记录的时间。Laravel 5时差

我的表具有的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)) }} 

是否有一个原因,我不能得到正确的数字?

+0

研究碳,这已经建成laravel:http://carbon.nesbot.com/docs/#api-humandiff – aynber

+0

虽然我可以在我看来使用碳? –

+1

@Wolrab当然可以。 – Bogdan

回答

4

您正在将时间戳转换为格式化字符串并尝试计算字符串之间的差异。相反,你应该计算每个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 

因为你选择了没有前导零格式化小时,两个时间戳之间的差异是一分钟(和未示出的,因为他们是一些备用秒不包含在格式化字符串中)。

+0

Thanks @bogdan,CARBON新手!我试过你是方法,但我得到语法错误,意外的')',期待','或';' –

+0

最后可能是'''',试试删除 – camelCase

+0

对不起,解决了那个:)我认为这个技巧完美无缺!谢谢 –

0

我可能是错的,但它的算术运算可能未定义在date的输出上。我对PHP并不熟悉,但bash会将数值“0”应用于任何不是您尝试添加的数字的内容。所以,如果你没有

"hello" + 5 

你会得到5。在这种情况下,你有评价结果为0给0 + 0 = 0

有在PHP解决时间算术问题Here两个对象。希望这会让你成为实现你想要的最好方式!