2013-12-11 178 views
1

我有一個數據庫,其中包含具有創建日期(unix時間戳)和發佈日期(unix時間戳)的帖子。我想計算創建後發佈帖子的平均時間。我猜IM的路要走,但是這是我走到這一步:計算unix時間戳之間的平均時間

$times = array(); 
foreach($posts as $post) { 
    $timeBetween = $post->publicationDate - $post->creationDate; 
    array_push($times, $timeBetween); 
} 
$average = array_sum($times)/count($times); 
echo date("H:m:s",mktime(0,0,$average,0,0,0)); 

我的最佳輸出會是這樣的:1天,12小時,13秒..

有人嗎?

感謝任何幫助!

+0

?結果是什麼? –

回答

1

你爲什麼不使用foreach循環是這樣的:

$time = 0; 
foreach ($posts as $post) { 
    $time += $post->publicationDate - $post->creationDate; 
} 

$average = $time/count($posts); 

這樣你就不需要使用數組,並且你得到了相同的結果。

如果你想顯示什麼樣子2 days, 4 hours, 43 minutes and 2 seconds你可以這樣計算的話:你有沒有嘗試運行

// 1 day = 24 hours * 60 minutes * 60 seconds = 86400 seconds 
$days = floor($average/86400); 
$hours = floor(($average % 86400)/3600); 
$minutes = floor(($average % 3600)/60); 
$seconds = $average % 60; 

echo $days . ' day' . ($days > 0 ? 's' : '') . ', '; 
echo $hours . ' hour' . ($hours > 0 ? 's' : '') . ', '; 
echo $minutes . ' minute' . ($minutes > 0 ? 's' : '') . ', '; 
echo $seconds . ' second' . ($seconds > 0 ? 's' : ''); 
+0

謝謝!:)工作完美!和關於刪除陣列的好消息。 – Stinis87

2

date()不適合這份工作。 date()不瞭解像2D 3H 27M一段時間,它只能理解時間點。

在你的代碼$average將包含若干秒,所以你應該像完成: -

$h = floor($average/3600); 
$average -= $h*3600; 
$m = floor($average/60); 
$average -= $m*60; 
$s = floor($average); 
echo "$h:$m:$s";