【问题标题】:PHP5 adding 1 HR to blank time variables/calculationsPHP5 将 1 HR 添加到空白时间变量/计算
【发布时间】:2011-04-21 09:09:41
【问题描述】:

我最近升级到 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->start_time 为 2011-03-19 08:57:23)

完成:12:59(基于我的数据库中的 $item->finish_time 为 2011-03-19 12:59:38)

计算:05:02(这应该是 04:02)

【问题讨论】:

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


    【解决方案1】:

    当您使用 date("H:i") 时,您将时差视为时间点。我建议你只是手动计算经过的时间差

    echo floor( $elapsed / 60) . ":" . ($elapsed % 60)
    

    否则当 $elapsed 大于 24 小时时你会遇到问题。

    【讨论】:

    • 这返回了一个计算结果: 242:15 。仍然存在空变量在其他文本框中返回为 01:00 的问题 - 这通常会显示数据库时间数据。例如,我有一个文本字段,您可以在其中输入“付费时间”。由于未设置或填充变量,因此读取为 01:00 而不是 00:00。
    【解决方案2】:

    尝试设置

    date_default_timezone_set('UTC');
    

    在将您的经过时间转换为 H:i 格式之前立即

    if($elapsed != NULL) { echo date("H:i", $elapsed); } 
    

    记得之后再重置它

    您将经过的时间视为格式化的日期时间戳(这是 date() 函数所期望的),因此 PHP 遵循它的标准行为并将其视为语言环境格式化的日期/时间(不欣赏它正在被使用作为经过的时间),因此它会根据您的时区设置添加小时以显示正确的时间。

    【讨论】:

    • $elapsed 大于 24 小时他会遇到问题。
    • 在之前设置时区并在强制它计算出正确的计算之后再次更改时区,但是对于同一行上的其他输入文本字段,例如午餐、付费时间、疾​​病和假期全部像以前一样显示 01:00 而不是 00:00 - 因为它们的值当前在数据库中为 NULL。我正在考虑在创建行时用 00:00:00 预填充这些字段,但不确定是否有其他方法可以解决这个问题
    猜你喜欢
    • 2021-10-09
    • 2012-01-23
    • 1970-01-01
    • 2011-04-26
    • 2021-11-07
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多