1

我有两个日期,我想知道它们之间的时间。
我试试这个:

$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 部分
我如何将几个 $intervals 加在一起?然后得到他们的平均值?
我尝试:

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

4

3 回答 3

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

看到它在行动

于 2014-01-30T15:32:29.050 回答
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');
于 2014-01-30T15:33:58.857 回答
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(real different) + 2 hours (your time zone) 。如果您坚持使用 获得结果date(),则必须将最后几行更改为:

$runing_time= $done_dt - $created_dt - 2*3600;
$runing_time= date('H:i',$runing_time); 
//returns 07:02
于 2014-01-30T15:52:15.023 回答