计算unix时间戳之间的平均时间

时间:2013-12-11 17:37:30

标签: php unix-timestamp

我有一个数据库,其中包含同时具有创建日期(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秒..

任何?

感谢任何帮助!

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分:1)

为什么不使用这样的foreach-loop:

$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' : '' );
相关问题