【问题标题】:Calculating average time between unix timestamps计算unix时间戳之间的平均时间
【发布时间】:2013-12-11 17:37:30
【问题描述】:

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

有人吗?

感谢任何帮助!

【问题讨论】:

  • 你试过运行它吗?结果如何?

标签: php unix-timestamp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    为什么不使用这样的 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' : '' );
    

    【讨论】:

    • 谢谢!:) 完美!以及关于删除数组的好技巧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多