Средний интервал сна в 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 часа для начала и окончания.

Другие вопросы по тегам