我最近升级到PHP5,并且已经注意到在我构建的应用程序中,似乎在我的一些变量和计算中添加了额外的小时。
我正在使用:
date_default_timezone_set( '欧洲/伦敦');
我理解这意味着PHP使用BST而不是标准GMT,但是当我打印空变量时(使用“H:i”返回00:00之前) - 我现在正在01:00。
当计算两个日期时间之间的小时/分钟差异时 - 我还要多加一小时。
我的基本代码是:
<td><?php if(isset($item->start_time)) { echo date('H:i', strtotime($item->start_time)); } ?></td>
<td><?php if(isset($item->finish_time)) { echo date('H:i', strtotime($item->finish_time)); }?></td>
<td>
<?php
$start = strtotime($item->start_time);
$end = strtotime($item->finish_time);
$elapsed = $end - $start;
if($elapsed != NULL) { echo date("H:i", $elapsed); }
?>
</td>
以rown为例返回:
开始时间:08:57(根据我的数据库中的$ item-&gt; start_time为2011-03-19 08:57:23)
结束:12:59(基于$ item-&gt; finish_time,作为我的数据库中的2011-03-19 12:59:38)
计算:05:02(这应该是04:02)
答案 0 :(得分:1)
您将时差视为使用日期(“H:i”)的时间点。我建议你手动计算经过时间差
echo floor( $elapsed / 60) . ":" . ($elapsed % 60)
否则当$ elapsed大于24小时时,你会遇到问题。
答案 1 :(得分:0)
尝试设置
date_default_timezone_set('UTC');
在您将经过时间转换为H:i格式之前
if($elapsed != NULL) { echo date("H:i", $elapsed); }
记得之后再次重置
您将经过时间视为格式化的日期时间戳(这是date()函数所期望的)因此PHP遵循它的标准行为并将其视为区域设置格式化的日期/时间(不理解它正在被使用)作为一个经过的时间),所以它是根据你的时区设置添加小时来显示正确的时间。