Чтобы сделать это точно без добавления даты:
Как упомянуто в комментарии @ barry-houdini , чтобы « Спящие часы» работали, вам нужно использовать MOD
так как время "оборачивается" в 12:00 /24:00, что равно 1 в мире электронных таблиц. , Для этого:
C3: =mod(B3-A3,1)
Если у вас есть длительности, среднее значение просто:
C2: =AVERAGE(C3:C7)
Для средних значений фактического времени вам нужно будет использовать ARRAYFORMULA
если есть вероятность, что время в каком-либо одном столбце будет необходимо "обернуть" вокруг полуночи (то есть могут быть некоторые значения с одной стороны и некоторые с другой ). Для этого имеем:
A2: =ARRAYFORMULA(AVERAGE(if(A3:A7>0.5,A3:A7,A3:A7+1)))
Приведенная выше формула просто берет каждое значение в диапазоне, проверяет, превышает ли оно значение 0,5 (полдень), и если оно не добавляет 1, чтобы переместить его на следующий день, то усредняет все значения. 0.5 предполагает, что вы не ложитесь спать до полудня, но если у вас необычное расписание, вы, очевидно, можете его изменить.
Что касается среднего времени бодрствования, то, скорее всего, вышеперечисленное не является необходимым для большинства людей, потому что обычно вы просыпаетесь между полуночью одного дня и полуночью следующего, поэтому ни одно из ваших значений не нужно «оборачивать». Это говорит:
B2: =AVERAGE(B3:B7)
Чтобы сделать это точно с датами:
Добавление дат действительно только маскирует проблемы с вычислением средних значений, потому что оно использует и дату, и время для среднего. Это вычисление времени в определенный день, которое является средним значением всех значений даты и времени. Это приводит к двум проблемам:
- Если вы пропустите один день данных, ваше среднее значение полностью сбрасывается
- Если у вас есть четное количество дней данных, это даст вам противоположное значение времени AM/PM
То, что вы действительно пытаетесь усреднить, это TIMEVALUES
, поэтому мы просто добавим это к каждому из диапазонов в формулах сверху:
A2: =ARRAYFORMULA(AVERAGE(if(TIMEVALUE(A3:A7)>0.5,TIMEVALUE(A3:A7),TIMEVALUE(A3:A7)+1)))
B2: =ARRAYFORMULA(AVERAGE(TIMEVALUE(B3:B7)))
C2 не нужно менять, так как он все еще имеет дело с продолжительностью, а не с датами.