在Google Spreadsheets中以年,月,日(在一列中)表示的两个日期之间的差异

时间:2019-03-18 12:14:27

标签: google-sheets spreadsheet

我在Google表格中设置了一组列,这些列使用DATEDIF函数显示两个日期之间的时差:

=DATEDIF (AS2, TODAY(), "D") 

(自某个日期以来今天过去的天数)

=DATEDIF (AR11, AS11, "D")

(两个特定日期之间经过的天数)

这些值以天数表示。这对于较短的持续时间是可以的,但是对于987天之类的时间,我想将值显示为更直观的内容,例如:

| 2 Years, 8 months, 17 days | 

如果在同一列中不可能做到这一点,那么我至少希望有一组3列,以3种不同的值类型显示此持续时间:

| 2 Years | 8 months | 17 days |

仅更改每一列的值类型(例如,从几天到几个月)就足够简单了,但是我不确定如何继续保持相互之间显示的值(而不仅仅是在不同的持续时间类型中显示相同的值。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我将把您的问题解释为需要在完整年份,完整日历月和任何剩余天中回答。这应该非常简单,除非包含开始日期的月份比包含结束日期的月份之前的月份多一些天。

示例:

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))))

enter image description here

编辑

*已在this website上进行了检查,发现它做出了相同的假设-您将相同的持续时间(1个月零一天)从28/1/19到1/3/19为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

您还可以在Datedif中使用MD参数:

=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...

enter image description here

答案 1 :(得分:1)

=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)"))

0

答案 2 :(得分:1)

=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")}))

0

demo spreadsheet