2013-12-11 4 views
1

У меня есть база данных, которая содержит сообщения, в которых есть дата создания (временная метка unix) и дата публикации (временная метка unix). Я хочу рассчитать среднее время, которое займет публикацию после ее создания. Я думаю, им-поодаль, но это то, что я получил до сих пор:Расчет среднего времени между временными отметками 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

Почему вы не используете Еогеасп-цикл, как это:

$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"; 
Смежные вопросы