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、 從上市公司取得的股息紅利所得,在計算個人所得稅時是否有優惠?
    怎樣計算預產期
    離婚計算器 算算離婚你要損失多少?(組圖)
    胎兒體重計算器
    姓名五格的計算方法和數理暗示歸類

    TAG:計算 | 函數 | 日期 | 注意 | 這個 |