2017-11-08 5 views
0

배열의 여러 번 avarage를 얻으려고하면 배열이 두 개의 다른 요일 시간을 갖지만 false 값을 반환합니다. 예를 들면 다음과 같습니다. 시간이 같을 때PHP 복수 회 평균

: - : 0시 30분 30초

그러나 지금은 반환 23시 30분 30초 1시 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 pm과 01:30am입니다. 오후 12시 30 분 (즉, 같은 날에 그들 사이의 중간에 있음)이 될 것입니다. 다른 값을 원하면 날짜를 포함시켜야합니다. – iainn

답변

0

지난 번 코멘트에서 말하자면, 전날을 22:0023:59 사이의 모든 시간으로 처리해야하기 때문에 이전의 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