2014-01-30 244 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會更快? –

相關問題