【问题标题】:Php Average of Multiple Timesphp多次平均
【发布时间】:2017-11-08 09:10:41
【问题描述】:

当我尝试获取多个数组的平均值时,它返回 false 值给我,而数组有两个不同的一天时间。例如;

时间大概是:23:30:30 - 01:30:30 平均应该是:00:30:30

但现在它返回:12:30:30

我的阵列:

    [0] => 22:50:20
    [1] => 05:37:42
    [2] => 04:21:15
    [3] => 02:51:00
    [4] => 00:35:09
    [5] => 01:28:45
    [6] => 23:15:47
    [7] => 02:50:01
    [8] => 03:32:04
    [9] => 00:09:17
    [10] => 23:49:10
    [11] => 23:26:37
    [12] => 00:35:56
    [13] => 04:54:00
    [14] => 00:55:06
    [15] => 23:32:03
    [16] => 02:27:27
    [17] => 02:22:42
    [18] => 01:49:47
    [19] => 03:25:36 ) 


    Average: 07:44:29

PHP 代码

date('h:i:s', array_sum(array_map('strtotime', $all_times)) / count($all_times));

【问题讨论】:

  • 这是正确的时间,但您是以 12 小时格式显示的。尝试改用 H:i:s
  • 我不明白这是怎么回事,看来您正在添加并获取此持续时间的平均值
  • 按照您的计算方式,23:30 pm 和 01:30 am 的平均值将是 12:30 pm(即同一天它们之间的一半)。如果您想要不同的值,则需要包含日期。
  • "23:30:30 - 01:30:30 平均值应为:00:30:30" -- 平均值为 12:30:30。仅当01:30:30 在第二天时才为00:30:30,但此信息未在您的输入数据中的任何位置提供。
  • 你需要一个绝对的基础,你的每一次都有一个相对的基础。只有在相同的基础上,你的平均数才是合理的。

标签: php time average


【解决方案1】:

从您的上一条评论开始,您需要将 22:0023:59 之间的所有时间都视为前一天,以便您在一个连续的六小时周期,而不是一天 24 小时。您可以通过从时间晚于晚上 10 点的所有值中减去一天来做到这一点:

$times = ['23:00', '01:00'];

$total = 0;

foreach ($times as $time) {
    $dt = new DateTime($time);

    // Treat all values later than 10pm as the previous day
    if ($dt->format('H') >= 22) {
        $dt->modify('-1 day');
    }

    // Sum the timestamps
    $total += $dt->format('U');
}

$average = $total / count ($times);
echo date('Y-m-d H:i:s', $average);

// 2017-11-08 00:00:00

https://eval.in/895375

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多