2017-11-08 8 views
0

私は配列の複数回のavarageを取得しようとしたとき、配列は2つの異なる日の時間を持っている間、その私の偽の値を返します。複数回の平均PHP

回のようになる:23時30分30秒 - 1時30分30秒の平均は次のようになります。〇時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)); 
+1

を参照してください、しかし、あなたは、12時間形式で表示している:あなたは時間が午後10時より後にあるすべての値から日を減算することによってこれを行うことができます。代わりにH:i:sを使用してみてください –

+0

どうしたのか分かりません。この期間の平均を追加しているようです。 – Beginner

+3

平均を23:30と01:30に計算しています午後12時30分(すなわち、同じ日に彼らの間の半分)になるでしょう。別の値が必要な場合は、日付を含める必要があります。 – iainn

答えて

0

最後のコメントから、前の日にすべての時間を22:0023:59の間で処理する必要があります。その結果、1つの連続した6時間の間に平均値が得られます。 24時間いつでもそれは正しい時間です

$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

+0

少し修正していただきありがとうございます。 – Khan