【问题标题】:Adjusting Time Averages to Show Weekdays or Weekends调整时间平均值以显示工作日或周末
【发布时间】:2021-07-19 02:56:23
【问题描述】:

我正在跟踪我向 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+.*")),
                    TIMEVALUE(REGEXEXTRACT(A2:A, "\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'
        ")

但实际上,我并不关心周末,而是关心工作日的晚上。不知道如何调整公式,使其仅显示周日至周四的夜晚。

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

转向那些比我更疯狂的人!

感谢您的帮助,

画了

【问题讨论】:

  • 除了计算周四午夜之后的就寝时间之外,还有更多的事情要做。您必须考虑在午夜之后排除周六的就寝时间;午夜之前或之后的就寝时间以及哪一天影响就寝时间的月份(例如,1 月 1 日凌晨 12:03 确实是 12 月的就寝时间,然后公式需要确定 12 月 31 日是否是周日至周四);区分 2021 年 1 月和 2022 年 1 月的时间等等。
  • 当然,这一切都可以做到。但请记住,这是志愿者在空闲时间参加的免费论坛。如果您首先共享包含足够 (20+) 数据的电子表格的链接,您将增加获得帮助的机会。

标签: datetime google-sheets dayofweek


【解决方案1】:

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

单元格 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 
  ) 
)

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

【讨论】:

  • 嗨 Doubleunary,Cell C2 公式给了我一个错误;下面 Ed 的解决方案起到了作用,但如果您对自己的解决方案有任何调整,我很想看看它的实际效果……这种方法真的很有趣!
  • 嗯...这些公式似乎与您在上面显示的粘贴到单元格 A2:A4 中的示例数据一起工作正常。请分享sample spreadsheet 可以重现该问题。
【解决方案2】:

这里是部分解决方案。

=ArrayFormula(query(if(A2:A = "",, {
  month(REGEXEXTRACT(A2:A, "(.*) at")),
  REGEXEXTRACT(A2:A, "\D+"),
  REGEXEXTRACT(A2:A, "\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 表示周五中午。埃德

【讨论】:

  • 感谢您的解决方案,Ed - 这似乎确实有效,但很难证明,但我现在看到了我之前的时间,因为我后来的周末被删除了。
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2016-01-12
相关资源
最近更新 更多