PHP DateTime 格式有效,但 DateInterval 格式无效

标签 php datetime datetime-format dateinterval

我这里有一些 PHP 代码,用于计算(并回显)持续时间。我有一个 if/else 来选择如何计算持续时间。由于我完成计算的方式,在一种情况下,输出的持续时间是 DateTime 对象,在另一种情况下,输出的持续时间是 DateInterval 对象。两者的格式化都是在 if/else 语句之外完成的。

计算工作正常,并且 DateTime 对象的格式工作正常,但 DateInterval 对象的格式设置已关闭。它显示输出时间内的百分号(示例位于代码块末尾)。

$time1 = new DateTime($row[0]); 
$time2 = new DateTime($row[1]);

if ($time1 > $time2) { 
    $twentyFourHours = new DateTime('240000');
    $difference = $time1->diff($twentyFourHours);
    $time2->add($difference);
    $duration = $time2; // this is a DateInterval object
}

else    {
$duration = $time2->diff($time1);  // This is a DateTime object
        }  

echo $duration->format('%H:%I');
echo '<br>';
echo $row['2'];
    }

下面是我得到的输出示例(每隔一个持续时间是带有百分号的 DateInterval 对象):

02:10
2016-06-16

%12:%0
2016-06-16

03:04
2016-06-17

%12:%0
2016-06-17

据我在 DateInterval 格式化文档中所知,我正在正确设置两位数小时和两位数分钟('%H:%I')的格式,但输出似乎证明并非如此。我猜我忽略了一些愚蠢的事情,如果有人能指出我哪里出错了,我将不胜感激。

非常感谢!

最佳答案

我将其放入调试器中并进行设置,以便 $time1 比 $time2 多 2 小时 10 分钟,这看起来像您的第一个数据集并得到了相同的错误。

在调试器中观察时,$duration 是一个 DateTime 对象而不是 Duration 对象。具体来说:

$duration = $time2; // this is a DateInterval object

$time2 是一个 DateTime 对象,因此 $duration 变成了一个 DateTime 对象,因此格式失败。

所以,在你的代码中:

   // find the duration since midnight
   $twentyFourHours = new DateTime('240000');
   $difference = $time1->diff($twentyFourHours);

   // add that difference to time2...hmmm
   $time2->add($difference);

   // copy time2 to duration, this will copy the $time2 DateTime object
   $duration = $time2; // this is a DateInterval object

看起来您正在获取 $time1 自午夜以来的持续时间,然后将其添加到 $time2,我想知道这是否是拼写错误的地方,您打算在哪里做其他事情?希望有帮助!

关于PHP DateTime 格式有效,但 DateInterval 格式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38012723/

相关文章:

c# - .NET 在不同时区和不同区域设置的 SQL 中存储 DateTime

r - dplyr 代码 "df %>% group_by(date = cut(date, breaks = "1 小时"))"不再产生所需的结果?

javascript - c# datetime 到带有新日期或数据解析的 javascript 日期

c# - 使用 DateTime 格式化问题日期

r - R 中的增量时间戳解析(纳秒、微秒、毫秒)

java - 如何获得正确的日期格式?

php - WordPress中如何根据坐标显示用户?

php - 使用 PHP MySQL 打印包含图像的水平表格

php - 我如何创建多个请求获取/发布页面 url

php - 简单的php计数器