2016-02-08 99 views
0

下面的公式從最日期組合工作的:日期邏輯在Excel 2013

=IF(INT(B2)=INT(NOW()),"Today",IF(DAYS(NOW(),B2)>365,IF(DAYS(NOW(),B2)/365.25>1,YEAR(NOW())-YEAR(B2),0)&" years, ","")&IF(IF(MONTH(NOW())-MONTH(B2)<0,MONTH(NOW())-(MONTH(B2)-11),IF(DAYS(NOW(),B2)<28,0,MONTH(NOW())-MONTH(B2)))=0,"",IF(MONTH(NOW())-MONTH(B2)<0,MONTH(NOW())-(MONTH(B2)-11),IF(DAYS(NOW(),B2)<28,0,MONTH(NOW())-MONTH(B2)))&" months and ")&IF(DAY(NOW())-DAY(B2)<0,VLOOKUP(MONTH(B2),{1,31;2,28;3,31;4,30;5,31;6,30;7,31;8,31;9,30;10,31;11,30;12,31},2)-DAY(B2)+DAY(NOW()),DAY(NOW())-DAY(B2))&" days") 

除非B2是16/02/2015 15點19分00秒和 NOW()是8月2日/ 2016 14:54其中結果爲20天但顯然應該是11個月和30天。 我正在努力尋找我的邏輯中的漏洞。

+1

這個公式試圖做什麼? – Bathsheba

+0

這是一個日期比較。如果B2是* 15/07/2014 *,它將返回* 2年,6個月和24天*。如果B2是* 07/05/2015 *將返回* 8個月和1天*。如果B2是* 03/02/2016 *,它將返回* 5天*。 –

回答

1

你的函數似乎使用Julian年的長度,而不是更復雜的公曆。這就是爲什麼你的函數的健壯性會有問題的原因之一。

幸運的是,Excel有一個可以使用的內置函數DATEDIF。但是,由於某種原因,這是一個隱藏的功能! (我完全不知道爲什麼)。

如果A1和A2包含兩個日期,使用

=DATEDIF(A1,A2,"y") & " years, " & DATEDIF(A1,A2,"ym") & " months, " & DATEDIF(A1,A2,"md") & " days"

A1必須比A2更早。

+0

最後一部分似乎爲我做了一些奇怪的事情,例如如果你嘗試A1 = 31/1/15和A2 = 1/3/16,你會得到-1? –

+0

我看到了其他使用DATEDIF的回覆,但認爲它在2013年不可用,因爲它不在函數列表中:s謝謝@Bathsheba –

+0

它是 - 但由於某種原因隱藏。 @TomSharpe:當我在下一個辦公室時,我會檢查那個角落案例。 – Bathsheba

1

由於DATEDIF(DATE1,DATE2, 「MD」)主要產生隨機數時

DAY(dates2)<DAY(date1) 

這裏是一個可能的公式解決方案(在我的開始和結束日期是A2和B2): -

=DATEDIF(A2,B2,"y") 

=DATEDIF(A2,B2,"m") 

=IF(DAY(B2)>=DAY(A2),DAY(B2)-DAY(A2),DAY(B2)-DAY(A2)+DAY(EOMONTH(A2,0))) 

這裏有幾個測試案例: -

enter image description here

+0

確實如此,在我的回答中注意我說「A1必須早於A2」。你的方法看起來很有希加一。 (順便說一句,如果你不接受我的答案並接受你自己的答案,那麼你的解決方案將對未來的用戶更有用,這就是本網站的全部內容)。 – Bathsheba

+0

謝謝你的積極評論(我沒有做原始文章,但被吸引到它:-)) –

0

對於任何人想要做的一樣,這是我的工作職能:

=IF(DAYS(NOW(),B2)>0,CONCATENATE(IF(DATEDIF(B2,NOW(),"y")=0,"",DATEDIF(B2,NOW(),"y")),IF(DATEDIF(B2,NOW(),"y")=0,"", " year"),IF(DATEDIF(B2,NOW(),"y")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0),IF(IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ","")=""," and ",", "),""),IF(DATEDIF(B2,NOW(),"ym")=0,"",DATEDIF(B2,NOW(),"ym")),IF(DATEDIF(B2,NOW(),"ym")=0,"", " month"),IF(DATEDIF(B2,NOW(),"ym")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ",""),IF(DATEDIF(B2,NOW(),"md")=0,"",DATEDIF(B2,NOW(),"md")),IF(DATEDIF(B2,NOW(),"md")=0,"", " day"),IF(DATEDIF(B2,NOW(),"md")>1,"s","")),"Less than a day") 

這給出了「1年,5個月和15天」的結果。