2014-01-30 150 views
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部分
我怎么能总结几个$间隔在一起?之后获得他们的平均水平?
我尝试:

$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; 

显然我的代码没有工作,因为$间隔为一个对象。

+1

请使用PHP函数date_diff()http://www.php.net/manual/en/datetime.diff。 php – har2vey

+0

你在使用什么数据库,mysql? – datelligence

+0

因为你问它在什么时间和分钟它是在你的时区unix时间戳25356,这与时间之间的差异几乎没有关系。 – Wrikken

回答

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 
+0

更新问题:) – user2706762

+0

@ user2706762 1.it是另一个问题,2.您没有回答任何答案 –

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

+0

更新问题:) – user2706762

+1

@ user2706762这需要是它自己单独的问题。 –

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'); 
+0

'createFromFormat()'是不必要的,因为MySQL的日期时间格式很容易被'DateTime()'解析' –

+0

我真的很感谢@John Conde的信息。 –

+0

@John Conde如果格式是MYSQL的日期时间避免createFromFormat会更快? –

相关问题