我有两个约会,我希望得到它们之间的时间 我试试这个:
$created_dt="2014-01-30 09:27:02";
$done_dt="2014-01-30 16:29:38";
$created_dt=strtotime($created_dt); //1391066822
$done_dt=strtotime($done_dt); //1391092178
$runing_time= $created_dt-$done_dt; //25356
$runing_time= date('H:i',$runing_time);
echo $runing_time; // "09:02" <----------???????
为什么$ runing_time = 09:02 ???
这有什么好办法呢? 感谢
第2部分 我怎样才能总结几个$间隔?然后得到他们的平均值? 我试试:
$average_time;
foreach($tasks as $task)
{
$date1 = new DateTime($task['start']);
$date2 = new DateTime($task['end']);
$interval = $date1->diff($date2);
$runing_time=$interval->format("%h hours, %i minutes, %s seconds");
$average_time+=$interval ;
}
$final_average_time=average_time/4;
显然我的代码没有用,因为$ interval是一个对象。
答案 0 :(得分:3)
使用DateTime()
和DateInterval()
进行日期数学运算。 很多更容易做到。
$date1 = new DateTime("2014-01-30 09:27:02");
$date2 = new DateTime("2014-01-30 16:29:38");
$interval = $date1->diff($date2);
echo $interval->format("%h hours, %i minutes, %s seconds");
答案 1 :(得分:1)
尝试使用DateTime,diff
方法返回两个DateTime对象之间的差异
$createDate = DateTime::createFromFormat("Y-m-d H:i:s", $created_dt);
$endDate = DateTime::createFromFormat("Y-m-d H:i:s", $done_dt);
$interval = $createDate->diff($endDate2);
echo $interval->format('%R%a days %H hours %i Minutes and %s Seconds');
答案 2 :(得分:0)
我知道,你最好使用DateTime()
,但这里没有人谈论你的问题,为什么你得到了错误的结果。
因为date()
函数获取第二个参数作为时间戳并返回日期:1970-1-1 00:00:00 GMT
+ given time stamp
,请注意 GMT 强>部分。
这意味着如果您的时区 +2 ,则echo date("Y-m-d H:i:s",0)
会返回1970-1-1 2:00:00
,不会 1970-1-1 00:00:00
。
因此,您获得的结果是07:02
(真正不同) + 2 hours
(您的时区)。如果您坚持使用date()
获取结果,则必须将最后一行更改为:
$runing_time= $done_dt - $created_dt - 2*3600;
$runing_time= date('H:i',$runing_time);
//returns 07:02