如何获得两个日期之间的时间段

时间:2014-01-30 15:30:01

标签: php date date-math

我有两个约会,我希望得到它们之间的时间 我试试这个:

$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是一个对象。

3 个答案:

答案 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");

See it in action

答案 1 :(得分:1)

尝试使用DateTimediff方法返回两个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