调整时间平均值以显示工作日或周末

问题描述

当我向 Alexa 说晚安时,我正在跟踪日期/时间。这些条目是非常奇怪且无用的字符串,而不是日期和时间:

示例数据:

January 25,2021 at 12:03AM
January 25,2021 at 11:27PM
January 26,2021 at 11:17PM

Alexa 只是将这些非常规的日期/时间字符串转储到 A1-A 中???在第一个标签上。

我使用这个公式来显示我每个月的平均就寝时间:

= QUERY(ARRAYFORMULA(
            IF(LEN(A2:A),{
                MONTH(REGEXEXTRACT(A2:A,"\D+") & 1),REGEXEXTRACT(A2:A,"\D+"),IF(TIMEVALUE(REGEXEXTRACT(A2:A,"\d+:\d+.*")) > 0.5,TIMEVALUE(REGEXEXTRACT(A2:A,"\d+:\d+.*")),"\d+:\d+.*")) + 1)
            },"")),"Select Col1,Col2,avg(Col3) where Col1 is not null 
        group by Col1,Col2 Order By Col1 asc label Col1 '#',Col2 'Month',avg(Col3)
        'Average bedtime'
        ")

但实际上,我对周末的关注不像我对工作日晚上的关注那么大。对如何调整公式以使其仅显示周日至周四晚上感到困惑。

为了让它变得更棘手..如果我在星期四午夜后睡觉(喘气),那仍然应该包括在内。

转向那些比我更疯狂的技能!

感谢您的帮助,

画画

解决方法

我认为这应该考虑到上面提到的边缘情况:

单元格 B2:

=arrayformula( 
  regexreplace(A2:A,"^([\w,]+) at ([\w: ]+)$","$1 $2") 
)

单元格 C2:

=arrayformula( 
  query( 
    { 
      text(B2:B - (B2:B - int(B2:B) < timevalue("4:00 AM")),"mmmm"),text(B2:B - (B2:B - int(B2:B) < timevalue("4:00 AM")),"ddd"),timevalue(B2:B) + (B2:B - int(B2:B) < timevalue("4:00 AM")) 
    },"select Col1,avg(Col3) 
     where Col2 matches 'Sun|Mon|Tue|Wed|Thu' 
     group by Col1 
     pivot Col2",0 
  ) 
)

将结果单元格格式化为格式>数字>时间

,

这是部分解决方案。

=ArrayFormula(query(if(A2:A = "",{
  month(REGEXEXTRACT(A2:A,"(.*) at")),REGEXEXTRACT(A2:A,"\D+"),"\d+:.*") + (REGEXEXTRACT(A2:A,"\D\D$")="AM"),mod(REGEXEXTRACT(A2:A,"(.*) at") + REGEXEXTRACT(A2:A,"at (.*)")-1,7)
 }),"Select Col1,Col2,avg(Col3) where Col4 > 0.5 and Col4 < 5.5 
        group by Col1,Col2 Order By Col1 asc label Col1 '#',Col2 'Month',avg(Col3)
        'Average bedtime'
        "))

它没有解决 Erik 提出的年和月末问题。每月第一天中午之前的任何条目都应包含在上个月中。 Col4 在 0.5 是周日中午,5.5 是周五中午。埃德