【问题标题】:How to find the difference in hours between two dates dd/mm/yyyy hh:mm如何找到两个日期 dd/mm/yyyy hh:mm 之间的小时差
【发布时间】:2021-12-19 18:00:32
【问题描述】:

我在单元格中有两个日期

A1=05.11.2021 18:16
B1=05.11.2021 20:16

我需要找出两个日期之间的小时差。结果应该是(B1-A1)=2 网上没找到答案,求帮助。

【问题讨论】:

  • 将结果单元格格式化为h,您将得到2

标签: regex date datetime google-sheets duration


【解决方案1】:

使用:

=TEXT((DATE(
 REGEXEXTRACT(B1, "\d{4}"),
 REGEXEXTRACT(B1, "\.(\d+)\."),
 REGEXEXTRACT(B1, "^\d+"))+INDEX(SPLIT(B1, " "),,2))-(DATE(
 REGEXEXTRACT(A1, "\d{4}"), 
 REGEXEXTRACT(A1, "\.(\d+)\."), 
 REGEXEXTRACT(A1, "^\d+"))+INDEX(SPLIT(A1, " "),,2)), "[h]")

数组公式:

=INDEX(IFNA(TEXT((DATE(
 REGEXEXTRACT(B1:B, "\d{4}"),
 REGEXEXTRACT(B1:B, "\.(\d+)\."),
 REGEXEXTRACT(B1:B, "^\d+"))+INDEX(SPLIT(B1:B, " "),,2))-(DATE(
 REGEXEXTRACT(A1:A, "\d{4}"), 
 REGEXEXTRACT(A1:A, "\.(\d+)\."), 
 REGEXEXTRACT(A1:A, "^\d+"))+INDEX(SPLIT(A1:A, " "),,2)), "[h]")))

更短:

=INDEX(IFERROR(1/(1/(TEXT(
 REGEXREPLACE(B1:B, "(\d+).(\d+).(\d{4})", "$2/$1/$3")-
 REGEXREPLACE(A1:A, "(\d+).(\d+).(\d{4})", "$2/$1/$3"), "[h]")))))

【讨论】:

  • 嗨@player0,您认为=hour(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/")) 在所有情况下都会产生与您的答案相同的答案吗?我不确定我的方法在某些情况下是否有问题。直到我看到你的答案才考虑过,现在我怀疑我的了,哈哈。
  • @NaziA 它在我的本地化工作表中工作,但后来我意识到 OP 要求持续时间
  • 我明白了,它还获得了总小时数。感谢您提供更明确的答案。
  • 错误显示/ 是分隔符。如果是.,我认为它应该可以正常工作。只有当单元格值是纯文本时,该公式才有效。我认为这已经是一个正确的日期,格式为 . 作为分隔符
【解决方案2】:

编辑:

正如上面评论中提到的@basic,您可以格式化输出所在的单元格,或者使用texth 表示小时差,[h] 表示整个持续时间(从库珀的回答中得到) .请参阅下面的用法和区别:

文字:

=text(B1-A1, "h") 

=text(B1-A1, "[h]") 

更新:

  • 确保您的日期时间使用正确的分隔符。 /- 是可以接受的(例如 5/11/2021 18:16:005-11-2021 18:16:00)。 (这完全取决于您的语言环境。)

  • 如果您想显示它以 . 作为分隔符,只需使用自定义日期时间格式并使用 . 作为其分隔符。

  • 使用自定义格式:

  • 实际值与显示值:

  • 如果您不想对日期时间进行任何更改并希望将其作为文本,则在使用 text 之前使用 regexreplace 替换它们。

正则表达式替换:

=text(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/"), "h")

=text(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/"), "[h]")

【讨论】:

  • 不幸的是它不起作用。它抛出下一个错误“函数 MINUS 参数 1 需要数字值。但是 '05.11.2021 20:16' 是文本,不能强制转换为数字。”
  • 我更新了我的答案@DmitriyKupriyanov
  • 非常感谢@NaziA 我还有其他问题。你知道为什么不能正常工作吗 =text(NOW()-REGEXREPLACE(A2, "\.", "/"), "d") ?
  • 欢迎您@DmitriyKupriyanov。如果A2 的分隔符是. 并且是纯文本,它应该可以工作并返回多少天。你能分享一个样本表吗?可能是您的A2 已经是一个日期,或者分隔符不是.。如果A2 已经是日期,则无需使用REGEXREPLACE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2015-10-08
  • 2019-03-11
  • 2018-11-18
相关资源
最近更新 更多