[英]SQLite: express the difference as days, hours, minutes between two given dates
[英]Difference between two dates in years days hours minutes format
我试图找出两天“xx 年 xx 天 xx 小时 xx 分钟”格式之间的区别。 我的开始日期在 A 列中,结束日期在 B 中。计算 C 列中的差异。
我在 C 列中使用B1-A1
公式,并在 C 列中使用自定义格式"yy" years "dd" days "hh" hours "mm" minutes"
。如果开始和结束年份不同,它工作正常。但如果它是一样的,C 列报告错误的年和日。(显示为 99 年和 30 天)。
如何解决?
如果两个值相同,则放置条件,否则应该做减法
=IF(A1=B1,"0",B1-A1)
如果你想要你的格式的答案=IF(A1=B1,"00 years 00 days 00 hours 00 minutes",B1-A1)
有点长,但它有效。 想尝试TEXT
但我有额外的条件。
=datedif(A2, B2, "y")&" years "
&if(day(B2) >= day(A2),
if(timevalue(B2) >= timevalue(A2),
day(B2) - day(A2),
day(B2) - day(A2) - 1),
if(timevalue(B2) >= timevalue(A2),
day(eomonth(B2, -1)) + day(B2)-min(day(A2), day(eomonth(B2, -1))),
day(eomonth(B2, -1)) + day(B2)-min(day(A2), day(eomonth(B2, -1))) -1))&" days "
&hour(B2 - A2)&" hours "
&minute(B2 - A2)&" minutes"
timevalue(B2)>timevalue(A2)
添加到原始公式中以考虑开始日期的较晚时间,如果发生这种情况,则将天数减少 1您的B2 - A2
公式实际上得到了正确的结果 - 它是一个日期序列值,表示以days为单位的两个时刻之间的差异。
问题在于您使用的自定义数字格式。 它指的是日历时间,而您需要经过的时间。 不幸的是,Google Sheets 显然只支持以小时、分钟和秒为单位的经过时间。
如果文本字符串结果对您没问题,请使用以下命令:
=datedif(A2, B2, "y") & " years " & datedif(A2, B2, "d") - 365 * datedif(A2, B2, "y") & " days " & text(B2 - A2 - int(B2 - A2), "HH ""hours"" mm ""minutes""")
该公式假设所有年份都是 365 天,当日期跨度跨越闰日时,这将不正确。
有关日期和时间值如何在电子表格中工作的说明,请参阅此答案。
尝试:
=INDEX(IFERROR(TRIM(REGEXREPLACE(
TEXT(DATEDIF(A2:A, B2:B, "Y"), "0#")& CHOOSE(MATCH(DATEDIF(A2:A, B2:B, "Y"), {0, 2}), " year ", " years ")&
TEXT(DATEDIF(A2:A, B2:B, "YD"), "0#")& CHOOSE(MATCH(DATEDIF(A2:A, B2:B, "YD"), {0, 2}), " day ", " days ")&
TEXT(TEXT(B2:B-A2:A, "H"), "0#")& CHOOSE(MATCH(TEXT(B2:B-A2:A, "H") *1, {0, 2}), " hour ", " hours ")&
TEXT(INT(TEXT(B2:B-A2:A, "M.S")), "0#")&CHOOSE(MATCH(TEXT(B2:B-A2:A, "M.S")*1, {0, 2}), " minute", " minutes"),
"\b0 (year|day|hour|minute)", ))))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.