精确造型的时间差异(php)

时间:2014-11-04 18:47:14

标签: php datetime

很容易从两次(格式:H:i:s)获得分钟和秒的差异,我从本网站上的另一个问题得到了。

我试过这种方式:

$start_date = new DateTime('04:10:58');
$since_start = $start_date->diff(new DateTime('10:25:00'));
echo $since_start->h.':';
echo $since_start->i.':';
echo $since_start->s;

但是那个输出:

  

6:14:2

我认为这看起来不太好。我希望它看起来像:06:14:02

我也想使用当前时间而不是给定时间,但是上面的代码不起作用我注意到了。

$start_date = date("H:i:s");
$since_start = $start_date->diff(new DateTime('10:25:00'));
echo $since_start->h.':';
echo $since_start->i.':';
echo $since_start->s;

输出:

  

致命错误:在非对象

上调用成员函数diff()

我有两次: 一次是当前时间:date("H:i:s"),另一次是$time0,其中包含例如时间11:24:00(来自数据库)。

1 个答案:

答案 0 :(得分:2)

DateInterval的内部结构未格式化,您应该使用DateInterval::format函数:

$start_date = new DateTime('04:10:58');
$since_start = $start_date->diff(new DateTime('10:25:00'));
echo $since_start->format('%H:%I:%S');

对于第二个示例,您使用的是PHP字符串(因为date()返回一个字符串,而不是一个对象),并尝试将其视为DateTime对象,这就是您的原因&# 39;重新得到错误。您应该初始化一个空的DateTime对象,默认为now

$start_date = new DateTime(); // or DateTime('now')
$since_start = $start_date->diff(new DateTime('10:25:00'));
echo $since_start->format('%H:%I:%S');

如果您要从数据库中发起$start_date值,请说$time0,您可以将其直接传递到DateTime构造中将它转换为适当的DateTime对象是一个很好的尝试:

$start_date = new DateTime($time0);
$since_start = $start_date->diff(new DateTime('10:25:00'));
echo $since_start->format('%H:%I:%S');