PHP5为空白时间变量/计算添加1个HR

时间:2011-04-21 09:09:41

标签: php date time timezone binary-search-tree

我最近升级到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)

2 个答案:

答案 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遵循它的标准行为并将其视为区域设置格式化的日期/时间(不理解它正在被使用)作为一个经过的时间),所以它是根据你的时区设置添加小时来显示正确的时间。