【发布时间】: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
我在单元格中有两个日期
A1=05.11.2021 18:16
B1=05.11.2021 20:16
我需要找出两个日期之间的小时差。结果应该是(B1-A1)=2 网上没找到答案,求帮助。
【问题讨论】:
h,您将得到2。
标签: regex date datetime google-sheets duration
使用:
=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]")))))
【讨论】:
=hour(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/")) 在所有情况下都会产生与您的答案相同的答案吗?我不确定我的方法在某些情况下是否有问题。直到我看到你的答案才考虑过,现在我怀疑我的了,哈哈。
/ 是分隔符。如果是.,我认为它应该可以正常工作。只有当单元格值是纯文本时,该公式才有效。我认为这已经是一个正确的日期,格式为 . 作为分隔符
正如上面评论中提到的@basic,您可以格式化输出所在的单元格,或者使用text 和h 表示小时差,[h] 表示整个持续时间(从库珀的回答中得到) .请参阅下面的用法和区别:
=text(B1-A1, "h")
或
=text(B1-A1, "[h]")
/ 和 - 是可以接受的(例如 5/11/2021 18:16:00 或 5-11-2021 18:16:00)。 (这完全取决于您的语言环境。)如果您想显示它以 . 作为分隔符,只需使用自定义日期时间格式并使用 . 作为其分隔符。
使用自定义格式:
实际值与显示值:
如果您不想对日期时间进行任何更改并希望将其作为文本,则在使用 text 之前使用 regexreplace 替换它们。
=text(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/"), "h")
或
=text(REGEXREPLACE(B1, "\.", "/") - REGEXREPLACE(A1, "\.", "/"), "[h]")
【讨论】:
A2 的分隔符是. 并且是纯文本,它应该可以工作并返回多少天。你能分享一个样本表吗?可能是您的A2 已经是一个日期,或者分隔符不是.。如果A2 已经是日期,则无需使用REGEXREPLACE。