我正在创建一个带有条目的表格,其中包含签入,签出和说明。 checkin和checkout都是日期时间字段。计算总小时数,最佳解决方案?
我想计算一个项目的总工作时间。 这是我1个结账和签入之间计算:
{? $checkin = new DateTime($hour->checkin) ?}
{? $checkout = new DateTime($hour->checkout) ?}
@if($hour->checkout == '0000-00-00 00:00:00')
{? $checkout = new DateTime() ?}
@endif
{? $diff = $checkout->diff($checkin) ?}
{? $hours = $diff->format('%H:%I') ?}
现在,我通过这个计算秒总量:
$totaltime += strtotime("January 1, 1970 " . $hours . ":00")
所有的一切都已经显示在此之后,我计算量的小时本:
public static function format_time($seconds,$separator=':', $format = "%02d%s%02d") // t = seconds, f = separator
{
return sprintf($format, floor($seconds/3600), $separator, ($seconds/60)%60, $separator, $seconds%60);
}
然而,当我这样做: -
strtotime("January 1, 1970 00:40:00")
我得到一个负诠释。我究竟做错了什么?
当你真正感兴趣的是时间差异时,使用unix时间戳是一个非常糟糕的主意。以分钟为单位计算个体差异,将这些分钟加起来,并将它们格式化为hh:mm。 (同样,不要使用基于unis时间戳的日期函数,而要使用简单的数学运算。) – CBroe 2013-04-09 15:12:21
此外,请确保您以UTC(或GMT)获取这些时间。例如用'gmdate()'函数。否则,您可能会在夏时制转换过程中得到错误或奇怪的结果。 – 2013-04-09 15:39:57
@MattJohnson我的时区设置为欧洲/阿姆斯特丹,是否会影响它? – Thijmen 2013-04-09 16:58:59