DATEDIF函數的這個Bug,計算日期必須要注意
導語
職場中有很多工作會涉及到日期,比如租金、實習期,財務中又往往以兩個日期間隔的整月數來作為結算,而這又恰恰是初學者普遍感到困難的問題。多算一個月就是一個月的租金,那都是錢呢!!!
更尷尬的是作為辦公室的驕傲,鼎鼎有名的"函數高手"具體連判斷月份都不會,如何自處,如何自處呀?
2017-3-31 到 2017-4-30 實際已經是一整月了,但DATEDIF函數卻認為不到一個月...
2017-1-29 到 2017-2-28 也已經有一個月了,但DATEDIF同樣認為不到一個月!...
做一個技藝精湛的職場手工藝者
DATEDIF
語法
DATEDIF(起始日期,終止日期,間隔單位)
當【間隔單位】為 m 時即返回兩個日期之間的間隔月數,或者說間隔整月數。
例:
=DATEDIF("2016/2/27","2017/3/26","m")
=12
初次接觸這個函數一定會感嘆這簡直就是「天賜「呀!然後興奮不已,哈,看官不知道您曾經是不是也是這個情況?:)
例舉
警惕!警惕!警惕!
它是隱藏函數,Excel幫助文檔里沒有,編輯這個函數時也沒有函數提示工具,它更像一個中途夭折的函數,存在某種缺陷而最終未能順利產下的嬰兒。
圖1
圖1中標黃色的行都是DATEDIF函數在統計間隔月份時出錯的,C列單元格公式是直接套用DATEDIF的結果,以C2單元格為例公式如下。
=DATEDIF(A2,B2,"m")
第4行
2017/3/31 與 2017/4/30 都是月底,因此是妥妥的一整月,但從DATEDIF函數的表現看,似乎要等到2017/4/31日也算一整月。可惜4月只有30號。
第5行
2017/2/28 與 2017/3/28 ,前者是月底,需要到3月31日(月底)才算一整月,但從DATEDIF函數的表現看,似乎因為日期都是28日所以就算一整月了。太草率了!!寫這個函數的程序猿需要尷尬地笑笑。
第6行
2017/1/29 與 2017/2/28,後者是月底,因此即使是2017/1/31開始也已經是一整月了。而DATEDIF函數關注的顯然又是日期,29大於28,所以不到!個月!
癥結
從上方例舉我們可以看出問題都處在月底上面,DATEDIF函數只關注了日期的天信息,忽視了對月底信息的判斷,沒有提高月底日期的優先順序。
所以要做兩件:判斷月底和 提升月底優先順序
月底判斷
日期數據的本質是數字序列值,一天對應整數1,因此如果某個日期數據 1成為某月的1號,那麼這個日期就是月末。
公式1
=day(日期 1)=1
提升月底優先順序
間隔月數計算時是同時考慮月和日的信息的,如果將月底數據 1,讓它成為下一個月的日期,那麼在間隔月數計算時就相當於大大提升了優先順序。
2月28日至3月29日,DATEDIF函數判斷間隔月數為1月,但如果把月底2月28日提升優先順序變成3月1日,那麼肯定不會計算成1整月了。
如果兩個日期都是月底,那麼兩個日期都變成各自下一個月的1號,也能正常的返回間隔月份!
公式2
=if(day(日期 1)=1,日期 1,日期)
完美!
補丁
圖1【實際相隔月數】列D2單元格公式如下:
=DATEDIF(IF(DAY(A2 1)=1,A2 1,A2),IF(DAY(B2 1)=1,B2 1,B2),"m")
即對日期進行月底判斷和提升優先順序處理。
做一個技藝精湛的職場手工藝者
吐槽
當時用函數公式解決同學的問題我僅僅花了3分鐘,寫這個微信圖文我花了絕對不少於3個小時!Excel函數公式教學絕對是視頻首選!!!
視頻觀看
圖文作者:胡劍
推薦閱讀:
※536、 從上市公司取得的股息紅利所得,在計算個人所得稅時是否有優惠?
※怎樣計算預產期
※離婚計算器 算算離婚你要損失多少?(組圖)
※胎兒體重計算器
※姓名五格的計算方法和數理暗示歸類