Средний интервал сна в 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 со-компенсаций. Но это не относится к тем людям, которые работают по ночам и идут спать около 8-14!
Моя теория такова: во-первых, каким-то образом мне нужно найти пик, что-то вроде наиболее часто посещаемой области (например, в 9-10 есть 5 записей, в 10-11, есть 3 и т. Д.), А затем я могу решить совместно компенсировать граничные значения добавив 24 часа.
Как вы думаете?
3 ответа
Сделав предположение, что человек не спит более 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;
}
После того, как вы получите среднее время сна, вычислите либо среднее время сна, либо среднее время пробуждения и выполните сложение / вычитание, чтобы найти свой интервал. Альтернативой этому является нахождение среднего времени сна и среднего времени пробуждения (с учетом времени полуночи).
А как насчет учета относительной разницы с полуночи? Результат будет (-2+0+2+4)/4 = 00:45
Определите нижний предел, где вы можете сказать
Хорошо, люди не будут спать в это время дня, если я получу это время, это должно означать, что они работали всю ночь и спят только сейчас
и если время ниже этого предела, добавьте 24 часа для начала и окончания.