很容易从两次(格式: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
(来自数据库)。
答案 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');