Date 以年、月、日表示的两个日期之间的差异(在一列中)
我在Google表单中设置了一组列,使用Date 以年、月、日表示的两个日期之间的差异(在一列中),date,google-sheets,formatting,google-sheets-formula,array-formulas,Date,Google Sheets,Formatting,Google Sheets Formula,Array Formulas,我在Google表单中设置了一组列,使用DATEDIF函数显示两个日期之间的差异: =DATEDIF (AS2, TODAY(), "D") (自某个日期起今天已过去的天数) (两个特定日期之间经过的天数) 这些值以天数表示。对于较短的持续时间,这很好,但对于987天之类的时间,我希望将值显示为更直观的值,例如: | 2 Years, 8 months, 17 days | 如果在同一列中不可能这样做,我至少希望有一组三列以三种不同的值类型显示此持续时间: | 2 Years | 8 m
DATEDIF
函数显示两个日期之间的差异:
=DATEDIF (AS2, TODAY(), "D")
(自某个日期起今天已过去的天数)
(两个特定日期之间经过的天数)
这些值以天数表示。对于较短的持续时间,这很好,但对于987天之类的时间,我希望将值显示为更直观的值,例如:
| 2 Years, 8 months, 17 days |
如果在同一列中不可能这样做,我至少希望有一组三列以三种不同的值类型显示此持续时间:
| 2 Years | 8 months | 17 days |
当然,只需更改每个列的值类型(例如从天更改为月)就足够简单了,但我不确定如何继续保持显示的值相互关联(而不仅仅是在不同的持续时间类型中显示相同的值)
有什么建议吗?我会将您的问题解释为需要在完整的年份、完整的日历月和任何剩余的天数内给出答案。这应该相当简单,除非包含开始日期的月份比包含结束日期*的月份的前一个月有更多的天数 例如:
Start Date End Date Result
28/1/19 1/3/19 1 month and 1 day
29/1/19 1/3/19 1 month and 1 day
30/1/19 1/3/19 1 month and 1 day
31/1/19 1/3/19 1 month and 1 day
如果您接受这一点,则以下公式应适用:
年
月
一天
编辑
*我们检查了这一点,发现它做出了相同的假设——19年1月28日至19年3月1日的持续时间(1个月零1天)与19年1月31日至19年3月1日的持续时间相同,尽管总天数(32或29天)不同
可能的解决方法是在开始月份的剩余天数
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))
这似乎是一致的
您还可以使用MD参数来Datedif:
=datedif(A1,B1,"MD")
但在Google Sheets和Excel中,这可能会产生一个负数,如以下警告所示:
二月是28(或29!)天,而不是30天。“很多月都是31天。”这是真的,但并不重要。如果你说“2个月前”,你通常不会仅仅因为1月31日+2月28日而指59天前。你的意思是2个月作为30天平均值的标准单位“月前”和“年前”的问题是它们本质上是模糊的。“2个月前”可能意味着“1月的某个时候”或“1月18日”。因此,如果你非常具体地计算了你的差值中的天数,你肯定会暗示你正确地(读:完全正确地)计算了月份,非常棒,格式优美,而且有效。适应起来有点痛苦,我的sheets版本想要分号而不是comas,但它能工作!可能您应该使用一个已建立的库来执行此操作,因为手动计算可能会遇到闰年、时区转换等问题。特别是因为月份的长度是可变的。是的,因为月份的长度是可变的,所以两个声称是2年、8个月和17天的周期可能不相等。你同意这样吗?(除非您应用了其他一些模糊因素,例如所有月份都是30天长的)尝试了它,天公式似乎不起作用,它返回一个负值。很抱歉,一个明显的错误,if语句的第一部分应该是天(B1)-天(A1)(编辑)。第一个公式起作用,然而,很明显,由于它不返回简单的数值,它破坏了我一直应用于该列的条件格式(我忽略了说我也在做)。我曾尝试使用第二个公式(我正在回复的公式)使用单独的列,但它似乎不起作用-我遇到了错误。此外,我不确定上面的公式是否应该用于年份列(如屏幕截图所示)。如果只针对年列,我应该为月/日列修改哪些参数?您不需要修改任何内容。。。它是自动填充的。在这里,我为您制作了一个电子表格,您可以在其中进行适当的检查:
=mod(datedif(A1,B1,"m"),12)
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(B1,-1))+DAY(B1)-MIN(DAY(A1),DAY(EOMONTH(B1,-1))))
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))
=datedif(A1,B1,"MD")
The "MD" argument may result in a negative number, a zero, or an inaccurate result. If you are trying to calculate the remaining days after the last completed month...
=IF(DATEDIF(A1, B1, "D")>365, QUOTIENT(DATEDIF(A1, B1, "D"), 365)&" year(s) "&
QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30)&" month(s) "&
MOD(QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30), 30)&" day(s)",
IF(DATEDIF(A1, B1, "D")>30, QUOTIENT(DATEDIF(A1, B1, "D"), 30)&" month(s) "&
MOD(DATEDIF(A1, B1, "D"), 30)&" day(s)",
DATEDIF(A1, B1, "D")&" day(s)"))
=IF( DATEDIF(A2, B2, "D")> 365,
SPLIT(QUOTIENT(DATEDIF(A2, B2, "D"), 365)&" "&
QUOTIENT(MOD(DATEDIF(A2, B2, "D"), 365), 30)&" "&
MOD(QUOTIENT(MOD(DATEDIF(A2, B2, "D"), 365), 30), 30), " "),
IF( DATEDIF(A2, B2, "D")> 30,
{"", SPLIT(QUOTIENT(DATEDIF(A2, B2, "D"), 30)&" "&
MOD(DATEDIF(A2, B2, "D"), 30), " ")},
{"", "", DATEDIF(A2, B2, "D")}))