兩個日期之間以年、月、日表示的年齡,是將差距一次一個單位逐步測量得出:先計算完整的年數,再計算剩餘的完整月數,然後計算剩下的天數,從較早的日期向前推進,直到再加一個單位就會超過較晚的日期為止。這個借位順序——先年、再月、最後日——正是當曆法不配合時,讓年齡計算保持正確的關鍵。單純的天減天、月減月在短月(28、29 或 30 天)、在 2 月 29 日的生日,以及在參考日期與出生日期落在不同月份的情況下都會失效。Excel 提供了一個內建函數 DATEDIF,在搭配正確的單位代碼時可執行此精確計算,但其最底層的「MD」選項有著長期存在的怪癖,可能會回傳超出 0–27 範圍的值。一個免費的瀏覽器內年齡計算機以與值得信賴的日期函式庫相同的方式進行逐步借位運算——瞬間完成,無需撰寫公式,資料也絕不離開你的裝置。

how to calculate age in excel from two dates
how to calculate age in excel from two dates

為何單純的日期相減會讓年齡計算出錯

大多數的年齡公式都是從顯而易見的做法開始:年相減、月相減、日相減。這在生日恰好在或早於每年同一個日曆日期時可行,但在其他所有情況下都會出錯。

舉個真實的例子。假設某人的出生日期是2000 年 1 月 31 日,而你想知道他們在2025 年 3 月 1 日當天的年齡。單純的做法會說:

  • 年:2025 − 2000 = 25
  • 月:3 − 1 = 2
  • 日:1 − 31 = −30

二十五年兩個月又負三十天。這根本不合理——你不可能是負三十天大。

正確答案是25 年 1 個月又 1 天。原因如下:從 2000 年 1 月 31 日開始,向前推進 25 個整年,到達 2025 年 1 月 31 日。從 1 月 31 日再加一個完整的月,由於 2025 年不是閏年,會落在 2 月 28 日。從 2 月 28 日再加一天,就會抵達 2025 年 3 月 1 日——正好就是目標日期。這個借位順序讓每個數值都維持非負。

同樣的規則也解釋了為何 =(B1-A1)/365.25 這個「聰明」的捷徑同樣是錯的。它會回傳一個大致接近但永遠不會精確的小數,而且完全無法區分出年、月、日。

Excel 的內建方法:用 DATEDIF 計算年、月、日

Excel 提供了一個專為此運算而設計的函數:DATEDIF(start_date, end_date, unit)。第三個參數用來選擇要計算的單位:

  • "Y"——兩個日期之間的完整年數
  • "M"——兩個日期之間的完整月數
  • "D"——兩個日期之間的完整天數
  • "YM"——最後一個完整年之後的月數 (0–11)
  • "MD"——最後一個完整月之後的天數 (0–27,但有個怪癖——詳見下文)
  • "YD"——最後一個完整年之後的天數 (0–364)

若要在一個儲存格中同時取得完整的年月日的分解結果,請將三個「逐步取餘數」的變體串接起來:

=DATEDIF(A1,B1,"Y")&"y "&DATEDIF(A1,B1,"YM")&"m "&DATEDIF(A1,B1,"MD")&"d"

將較早的日期放在 A1,較晚的日期放在 B1。以先前 2000 年 1 月 31 日 → 2025 年 3 月 1 日 的例子來說,這個公式會回傳"25y 1m 1d"——也就是正確的答案。

一個已知的問題:「MD」單位在短月上不一定會遵循逐步借位的方法。在某些 Excel 版本中,相同的輸入可能會回傳 "25y 1m −1d" 或 "25y 1m 30d"。廣泛使用的變通方法是 DATEDIF(A1+1, B1+1, "MD"),將兩個參數都各往後推一天,藉此規避掉這個錯誤。如果你想要一個永遠正確而無須使用變通方法的結果,請直接跳到下方的年齡計算機段落。

逐步從兩個日期計算出精確年齡

以下是在 Excel 中從任意兩個日期取得年、月、日的完整流程:

  1. 開啟一個空白工作表,在儲存格 A1 中輸入較早的日期(例如 2000-01-31)。
  2. 在儲存格 B1 中輸入較晚的日期(例如 2025-03-01)。
  3. 在儲存格 C1 中,輸入 =DATEDIF(A1,B1,"Y") 以取得完整的年數部分。
  4. 在儲存格 C2 中,輸入 =DATEDIF(A1,B1,"YM") 以取得最後一個完整年之後剩餘的完整月數。
  5. 在儲存格 C3 中,輸入 =DATEDIF(A1,B1,"MD")+0 以取得最後一個完整月之後剩餘的天數——那個 +0 只是用來強制轉成數值。
  6. 在儲存格 C4 中,用 =C1&" years, "&C2&" months, "&C3&" days" 將三者組合起來。
  7. 若要計算總日曆天數,在 C5 中輸入 =B1-A1,並將其格式設定為數字。
  8. 若要計算總完整週數,在 C6 中輸入 =INT((B1-A1)/7);在 C7 中再加上 =MOD(B1-A1,7) 以取得剩餘天數。

在 A1 為 2000 年 1 月 31 日、B1 為 2025 年 3 月 1 日 的情況下執行,會得到25 年 1 個月又 1 天,以及整段區間的總天數。每個儲存格都可追溯、每條公式都很短,而且你可以把這些列往下拖,以便將相同的模式套用於一份姓名與日期的清單。

會讓大多數 Excel 公式失效的邊緣情況

三個日曆上的怪癖佔了大部分年齡計算錯誤的原因。

短月。每個月有 28、29、30 或 31 天——絕不是固定的 30 天。借位時,所借的量必須對應到你正走進去的那個實際月份。2025 年 2 月只有 28 天,因此 1 月 31 日 + 1 個月 = 2 月 28 日。2024 年 2 月(閏年)有 29 天,因此該年的 1 月 31 日 + 1 個月 = 2 月 29 日。

閏年。Gregorian 的規則是:若年份可被 4 整除即為閏年,但世紀年必須也能被 400 整除才算。因此 2000 年是閏年,而 1900 年和 2100 年都不是。2 月 29 日只有在閏年才存在,任何跨越 2 月 29 日 的年齡計算,都必須把那額外的一天計入總天數。

2 月 29 日出生的生日。2 月 29 日 每四年才出現一次(世紀例外如上所述)。對於出生在這一天的人,歐洲許多國家及許多法律體系所採行的慣例是,在非閏年時以 2 月 28 日 作為其生日,使他們每年都能增加一整歲,而不是每四年才增加一次。

將四種常見的 Excel 做法並排比較:

方法回傳結果失效之處
=DATEDIF(A1,B1,"Y")僅完整年數完全隱藏月數與天數
串接式 DATEDIF (Y + YM + MD)年、月、日分解結果"MD" 單位在短月可能失靈;需要 +1 的變通方法
=YEARFRAC(A1,B1)小數年數(例如 25.09)依基準而異;無法顯示月/日;對閏年敏感
=INT((B1-A1)/365.25)近似的整數年數每世紀約差一天;無法產生月或日

每一種做法在某些輸入下可行,卻會在其他輸入下悄悄算錯。「簡單情況看起來沒問題」與「跨整個曆法都實際正確」之間的落差,正是逐步借位的方法——與值得信賴的日期函式庫所使用的相同算術——所彌補的。

當你需要的是總數而非年/月/日時

有些問題用單一單位回答會更直接。嬰兒的週齡、以日數計算的週年紀念、保險或年金的資格門檻——這些情境常出現,而且都只要一個數字,而不是三個一組的結果。

總天數就是兩個日期之間精確的日曆天數,以每個月的實際長度計算,並把期間內每一個閏日都算進去。總週數就是該天數除以七並向下取整。總月數就是相同區間內經過的整月數。這些總數所描述的區間與年月日的分解完全相同,只是以單一單位表示;因此某個兩個月後的未來日期,可能會同時顯示為 0 年 2 個月、約 60 天以及約 8 週。

Excel 中可透過 =B1-A1 取得總天數,以 =INT((B1-A1)/7) 取得完整週數,而一旦底層日期正確,這些簡單的算術儲存格是可靠的。需要小心借位邏輯的是年月日的分解;總數則不需要。

一條更快的路徑:使用年齡計算機

若目標是答案本身,而非公式,那麼年齡計算機能在同一個畫面處理所有這些事。在第一個欄位中選擇你的出生日期——你的精確年齡會立即顯示,無需按任何按鈕。第二個欄位可保留為今天,或設定為任何過去或未來的日期,以找出你在那個確切時刻的年齡。你會同時得到年、月、日,以及總月數、週數、天數,還有距離你下次生日的即時倒數。

其運算在你的瀏覽器中以逐步借位的方法執行,與 date-fns 及類似的可信賴函式庫所用的邏輯相同。這代表它能以你預期的方式處理短月、閏年以及 2 月 29 日的生日,包括非閏年中以 2 月 28 日 作為生日的慣例。所有輸入都保留在你的裝置上——沒有任何日期會被上傳——因此即使是用於敏感資料的紀錄,也不會有任何上傳風險。當你變更欄位時,結果會立即更新,讓你可以來回捲動過去與未來的參考日期,並觀察年齡的變化。

針對 Excel 的工作,最簡潔的工作流程是:把兩個日期鍵入試算表作為記錄,然後當某個儲存格出現意料之外的數字時,再打開年齡計算機來確認分解結果。這兩分鐘的檢查,比在論壇中追查一個 "MD" 的怪毛病要來得快。

若你在權衡各種選擇,如何為女性計算 BMI:公式與範圍對此有詳細說明。

若你在權衡各種選擇,Excel 中從某日期計算工作日:公式與計算機對此有詳細說明。