2012-04-21 6 views
2

мне нужно, чтобы получить средний интервал ожидания из следующих данных:Средний интервал ожидания в PHP

  • 22: 00-06: 00
  • 00: 00-08: 00
  • 02: 00-10 : 00

=>ожидается: 00: 00-08: 00

  • 22: 00-06: 00
  • 00: 00-08: 00
  • 02: 00-10: 00
  • 04: 00-08: 00

=>ожидается: 01: 00-08: 00

Проблема заключается в колебании около полуночи, где часть находится в 00:00 и часть над 00:00. Простая средняя 22 + 00 + 02 + 04 не работает. Я мог подсчитывать количество раз за полночь (3 в этом случае), и если это больше, чем до полуночи, я должен добавить компенсацию 25 co. Но это не считается с теми людьми, которые работают ночью и спят около 8-14!

Моя теория: Во-первых, как-то Мне нужен пик, что-то вроде самой посещаемой области (например, в 9-10 есть 5 записей, в 10-11, 3 и т. Д.), А затем я могут принять решение о компенсации стоимости границы, добавив 24 часа.

Как вы думаете?

+1

Не нужно спать для разработчиков ... –

+0

Не могли бы вы использовать 0 в качестве базового значения, представляющего 00:00, так что 22:00 означает -2 и 01:00 равно +1? Вам нужны минуты? –

+1

http://www.dustincurtis.com/sleep.html –

ответ

0

Принимая предположение, что человек не спит более 24 часов, затем сделайте способ вычисления таким образом (псевдокод):

calculateSleepTime(sleepTime, wakeupTime) { 
    if (sleepTime > wakeupTime) { 
     return (24 - sleepTime) + wakeupTime; 
    } else { 
     return wakeupTime - sleepTime; 
    } 
} 

averageSleepTime(sleepTimesArray) { 
    totalSleptTime = 0; 
    totalTimesSlept = 0; 

    foreach (oneSleepTime in sleepTimesArray) { 
     totalTimesSlept++; 
     totalSleptTime += calculateSleepTime(oneSleepTime); 
    } 

    return totalSleptTime/totalTimesSlept; 
} 

После получения среднего времени сна, вычислить либо среднее время сна, или среднее время пробуждения, и сделать сложение/вычитание, чтобы найти свой интервал. Альтернативой этому является поиск среднего времени сна и среднего времени пробуждения (принимая во внимание относительно полночь времени).

0

Определить нижний предел, где вы можете сказать

Хорошо, люди не будут идти спать в это время дня, если я на этот раз, это должно означать, что они работали всю ночь и только спать

, а если время ниже этого предела, добавьте 24 часа для начала и окончания.

1

Как насчет учета относительной разницы с полуночью? Результат будет (-2 + 0 + 2 + 4)/4 = 00:45

+2

Я думаю, что вы правы, но так ли это? – abelito

+0

Да, 11:00 и 13:00 сделают (11 - 11)/2 = 0, а не 12. –

Смежные вопросы