【问题标题】:Calculate average time difference between multiple unix timestamps计算多个unix时间戳之间的平均时间差
【发布时间】:2013-08-12 14:22:36
【问题描述】:

我觉得有点愚蠢,但让我们想象一下,我有一组 unix 时间戳:

1375110404
1374660925
1374482694
1374242337
1373793867
1373632889
1373187141
1373021668
1372754021
1372599890

我想要实现的目标很简单:我只想计算这 10 个时间戳之间的平均时间差。我只是找不到正确的计算方法。

我刚刚尝试的是

1375110404 - 1374660925 = 449479
1374482694 - 1374242337 = 240357
1373793867 - 1373632889 = 160978
1373187141 - 1373021668 = 165473
1372754021 - 1372599890 = 154131

449479 + 240357 + 160978 + 165473 + 154131 = 1170418

1170418 / 5 = 234083,6

但这在我看来不合逻辑。非常感谢任何建议。

编辑:

所有这些标记都来自一个 php 数组。

编辑:

感谢 Orangepill 为我指明了正确的方向。这是最终的解决方案:

for($cnt = count($array), $res = 0, $i = 1; $i < $cnt; $i++) {
    $res += $array[$i-1] - $array[$i];
}

echo $res/$cnt;

这样计算

1375110404 - 1374660925 = 449479
1374660925 - 1374482694 = 178231
1374482694 - 1374242337 = 240357
1374242337 - 1373793867 = 448470
1373793867 - 1373632889 = 160978
1373632889 - 1373187141 = 445748
1373187141 - 1373021668 = 165473
1373021668 - 1372754021 = 267647
1372754021 - 1372599890 = 154131

449479 + 178231 + 240357 + 448470 + 160978 + 445748 + 165473 + 267647 + 154131 = 2510514

2510514 / 10 = 251051.4

这对我来说是正确的。

【问题讨论】:

  • 预期输出是什么?
  • 所有时间戳之间的平均时间(以秒为单位)。带着对结果的期望,我不会要求解决方案;)
  • 但这对我来说看起来不合逻辑。 -- 你是想把上面的逻辑转换成 PHP 代码,还是说结果和你想的不一样是吗?
  • 你只比较相邻时间吗?即 t1-t2, t3-t4, t5-t6 ...还是您需要比较总差异?即 t1-t2, t1-t3, t1-t4 ...
  • 平均 = 意思?中位数?模式?

标签: php timestamp average date-difference


【解决方案1】:

按照您描述的最直接的方式进行操作。

 $res =0;
 for($x = 1, $num = count($array); $x < $num; $x++){
     $res =+ $array[$x] - $array[$x-1];
 }
 echo $res/($num-1);

【讨论】:

  • 这对我来说是正确的,但是我必须检查一下,如果这正是我想要的。如果是,我的理论是正确的。泰。
  • $res += $array[$x] - $array[$x-1];
【解决方案2】:

如果时间戳没有按照严格的时间顺序排列,current accepted answer 将给出错误的结果。也就是说,负值会扭曲你的平均值。我可能错了,但我想你不想把任何时间差都算作负值,毕竟你不可能在-12秒内跑完100m!

我提供这个答案作为替代方案,无论传递数组中的时间顺序如何,它总是会根据正时差给出平均值:-

function array_average_diff(array $array)
{
    $diff = 0;
    for($i = 1; $i < count($array); $i++){
        $diff += abs($array[$i] - $array[$i - 1]);
    }
    return $diff/count($array);
}

See it working

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多