两个日期之间的差异表示为年、月、日(在一列中)
Difference between two dates expressed as years, months, days (in one column)
我在 Google 工作表中设置了一组列,使用 DATEDIF
函数显示两个日期之间的差异:
=DATEDIF (AS2, TODAY(), "D")
(从某个日期到今天过去的天数)
=DATEDIF (AR11, AS11, "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
如果您接受这一点,那么以下公式应该有效:
年
=datedif(A1,B1,"Y")
月份
=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))))
编辑
*在 this website 上进行了检查,发现它做出了相同的假设 - 28/1/19 至 1/3/19 的持续时间(1 个月零一天)与 31 相同/1/19 到 1/3/19 尽管总天数(32 或 29)不同。
可能的解决方法是使用开始月份的剩余天数
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))
这似乎与 this website
一致
您还可以将 MD 参数用于 Datedif:
=datedif(A1,B1,"MD")
但是在 Google 工作表和 Excel 中,这会产生负数,如 Excel documentation:
中警告的那样
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")}))
这是基于已经有一个具有天数差异的字段,在本例中为字段 A1(例如,将天数转换为 YMD)
=FLOOR(A1/365)&"y "&FLOOR((A1-(FLOOR(A1/365)*365))/30)&"m "&CEILING(A1-((FLOOR((A1-(FLOOR(A1/365)*365))/30)*30)+((FLOOR(A1/365))*365)))&"d"
它基于简化的一年 365 天、一个月 30 天的计算,因此并不完全准确 - 然而这似乎是其他人使用的方法。对于我的示例,它还将天数舍入为全天数 - 这可以用 FLOOR 而不是 CEILING
舍入
'Recommended Answer' 使用手动计算,即假设一年有 365 天,一个月有 30 天。要获得更精确的答案,请在 Google 工作表中使用此公式:
=ARRAYFORMULA(DATEDIF(B2:B13,C2:C13,"Y")&" years "& DATEDIF(B2:B13,C2:C13,"YM")&" months "& DATEDIF(B2:B13,C2:C13,"MD")&" days")
如果你想在没有 Arrayformula 的情况下使用:
=DATEDIF(B2,C2,"Y")&" years " & DATEDIF(B2,C2,"YM")&" months " & DATEDIF(B2,C2,"MD")&" days"
B 列:开始日期
C 列:结束日期
谢谢
我在 Google 工作表中设置了一组列,使用 DATEDIF
函数显示两个日期之间的差异:
=DATEDIF (AS2, TODAY(), "D")
(从某个日期到今天过去的天数)
=DATEDIF (AR11, AS11, "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
如果您接受这一点,那么以下公式应该有效:
年
=datedif(A1,B1,"Y")
月份
=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))))
编辑
*在 this website 上进行了检查,发现它做出了相同的假设 - 28/1/19 至 1/3/19 的持续时间(1 个月零一天)与 31 相同/1/19 到 1/3/19 尽管总天数(32 或 29)不同。
可能的解决方法是使用开始月份的剩余天数
=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))
这似乎与 this website
一致您还可以将 MD 参数用于 Datedif:
=datedif(A1,B1,"MD")
但是在 Google 工作表和 Excel 中,这会产生负数,如 Excel documentation:
中警告的那样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")}))
这是基于已经有一个具有天数差异的字段,在本例中为字段 A1(例如,将天数转换为 YMD)
=FLOOR(A1/365)&"y "&FLOOR((A1-(FLOOR(A1/365)*365))/30)&"m "&CEILING(A1-((FLOOR((A1-(FLOOR(A1/365)*365))/30)*30)+((FLOOR(A1/365))*365)))&"d"
它基于简化的一年 365 天、一个月 30 天的计算,因此并不完全准确 - 然而这似乎是其他人使用的方法。对于我的示例,它还将天数舍入为全天数 - 这可以用 FLOOR 而不是 CEILING
舍入'Recommended Answer' 使用手动计算,即假设一年有 365 天,一个月有 30 天。要获得更精确的答案,请在 Google 工作表中使用此公式:
=ARRAYFORMULA(DATEDIF(B2:B13,C2:C13,"Y")&" years "& DATEDIF(B2:B13,C2:C13,"YM")&" months "& DATEDIF(B2:B13,C2:C13,"MD")&" days")
如果你想在没有 Arrayformula 的情况下使用:
=DATEDIF(B2,C2,"Y")&" years " & DATEDIF(B2,C2,"YM")&" months " & DATEDIF(B2,C2,"MD")&" days"
B 列:开始日期
C 列:结束日期
谢谢