一個準確的年齡計算機,會先計算滿幾年,再計算滿幾個月,最後計算你的出生日期到參考日期之間剩下的天數──每當日曆會讓某個單位算出不可能的值時,就從下一個單位借位。人們會搜尋「準確的」年齡計算機,是因為用一個日期減去另一個日期,看起來很簡單,實際上卻處處是陷阱:每個月的天數不同、閏年每四年會多加一天(世紀年還有例外規則),而一旦生日落在 31 日、參考月份卻比較短時,天真的算法就會算出負數天數。一個正確的計算機,會用該月份實際的天數──28、29、30 或 31 天,絕不是固定的 30 天──來借一個月,並在單靠一個月不夠時,用同樣的方式再借一整年,讓每個數值都維持非負,且加總結果彼此一致。Age Calculator 就是套用這套演算法,讓任何過去或未來的參考日期,都能得到一個你可以直接寫在表單上、不必再三確認的結果。

age calculator accurate
age calculator accurate

為什麼天真的日期相減會得出錯誤答案

當一個人手動計算日期差、或一個寫得不好的計算機在做這件事時,常見的捷徑是一次把日、月、年分別相減。這個捷徑一旦某個單位變成負數就會出錯。最明顯的失敗案例,就是一個 31 天月份的最後一天。假設有人在 1 月 31 日出生,以 3 月 1 日為參考日期,用天真的算法會得到:3 月 − 1 月 = 2 個月,而 1 − 31 = 負 30 天。程式接著會「修正」這個負數,從月份中借 30 天,結果可能是 1 個月又 1 天(正確),也可能是 0 個月又 32 天(錯誤),視借位的方向而定。

更糟的是,如果借用的月份天數是寫死的 30 天,而不是取自實際的日曆,答案就會依照 2 月究竟是 28 天還是 29 天、以及前後月份是 30 天還是 31 天,出現一到三天的偏差。當參考日期落在 1 月初、但生日在 12 月底時,同樣類型的誤差也會累積進年份的運算裡──而當跨多年的區間恰好跨越世紀年邊界時,也會出現同樣的問題,這正是閏年例外規則最重要的地方。

正確的計算順序:先算年,再算月,最後算日

準確的年齡運算,是從出生日期往前推進,而不是從目標日期往回推。單位的順序不是風格上的選擇──它正是結果能夠可靠的全部原因。先計算滿幾整年,再從剩下的部分計算滿幾整月,最後計算剩下的天數。在每一步之前,都要檢查再加一個該單位,是否會超過目標日期。這正是像 date-fns 這類成熟日期函式庫所使用的相同運算方式,也正是讓年、月、日這三個分量彼此保持一致的原因。

來看這個經典的失敗案例:同一年裡,從 1 月 31 日到 3 月 1 日的差距。天真的「日減日」算法會得到 1 − 31 = 負 30 天,這個數字本身毫無意義。以正確的順序來計算:

  1. 月: 為 1 月 31 日加上 1 個月。因為 2 月有 28 或 29 天,這個日期會落在 2 月 28 日(閏年則是 2 月 29 日)。這個值小於或等於 3 月 1 日,所以月份計數至少是 1。
  2. 日: 游標停在 2 月 28 日的位置,再加 1 天,抵達 3 月 1 日。
  3. 結果: 1 個月又 1 天。

關鍵的細節在於,借用的那個月,用的正是游標所落在的那個 2 月的實際天數──28 或 29 天──而不是固定的 30 天。正是這一條規則,把準確的年齡計算機與粗略的計算機區分開來,也正是為什麼 2 月生日、月底到期的合約日期,以及季末的法定期限,都需要一個尊重真實月份天數的工具。當即使一整個月都不足以跨越差距時,計算機會用同樣的方式再借一整年,讓每個數值維持非負。

如何計算你的確切年齡

  1. 在第一個欄位選擇你的出生日期。 你的確切年齡會立即顯示出來──沒有送出按鈕,也不需要等待。只要日期有效,結果就會立刻更新。
  2. 把第二個日期留在今天,或設定成任何過去或未來的日期,來查出你在那個確切時間點的年齡。設定未來的參考日期,會告訴你屆時你會是幾歲;設定過去的參考日期,則會告訴你當時你是幾歲。如果第二個日期早於你的出生日期,工具會回報這個參考日期在未來,而不是顯示一個負數年齡。
  3. 以年、月、日的形式讀取你的年齡,再加上總滿月數、總週數、總天數,以及一個即時倒數計時到你下一次生日的功能。開啟 Age Calculator 並輸入你的出生日期,即可看到完整的細項結果。

因為這項計算完全在你的瀏覽器中執行,你的出生日期絕不會被送到任何伺服器,而且只要你變動任一個欄位,結果就會立即更新。你可以在任何參考日期下查詢你的年齡,而不會影響你輸入內容的隱私性。

2 月 29 日生日與格里曆閏年規則

在格里曆中,一年只有滿足三部分規則時才是閏年。Age Calculator 會針對它所跨越的每一個 2 月,使用其真實的天數,包括閏日本身,所以落在 2 月 29 日的生日,會依循真實的日曆走,而不是套用寫死的 365 天一年。

年份能被 4 整除?是世紀年嗎?能被 400 整除?是閏年嗎?
2024
2025
1900
2000
2100

2 月 29 日生日是這個計算機直接處理的特殊情況。因為這個日期在每四年中有三年並不存在,這個 Age Calculator 在平年時會把生日訂在 2 月 28 日──這是歐洲大部分地區與許多法律體系採用的慣例。結果是,一個閏日出生的孩子,每一年都會滿一整歲,而不是每四年才滿一次,這讓保險、退休金與合約相關的計算,能與日曆其餘部分的推進方式保持一致。

總天數、總週數與總月數:單一單位檢視的意義

除了年月日的細項結果之外,Age Calculator 也會用三種單一單位的總計,來表示同一段時間長度:總滿月數、總滿週數,以及總日曆天數。總天數是兩個日期之間精確的日曆天數,使用每個月份的真實天數,並計入範圍內每一個閏日。總週數是這個天數除以七、再無條件捨去。總月數則是經過的整月數。

這些總計涵蓋的時間長度,與年月日細項結果相同,只是用單一單位表示。它們在一些不符合「以生日為基準」的年齡定義的實際情境中很有用:嬰兒第一年以週數計算的年齡、以天數計算的紀念日、要求精確天數的簽證申請,或是以完整月數表示的法定資格門檻。對於依賴精確參考日期的數字,請使用 Age Calculator 直接取得這些總計,而不要手動估算。

西式年齡 vs. 東亞虛歲

Age Calculator 所使用的年月日計數方式,是護照、身分證與大多數法律表格上採用的西式系統。東亞的虛歲──中文稱為虛歲,韓文稱為세는 나이──採用不同的規則:一個人在出生時就算一歲,之後每個人都會在農曆新年一起長一歲,而不是各自在自己的生日長一歲。對於同一個人、同一個日期,這兩套系統可能相差一到兩歲,這在填寫引用當地系統的跨境表格時會造成影響。Age Calculator 回報的是西式計數;若以農曆新年為參考日期,從你的西式生日到那一天的差距,這個工具回傳的仍然是這個數字,所以你可以把它當作西式的對應值使用,不必重新手動計算。

延伸閱讀:如何計算兩個日期之間相差的天數

延伸閱讀:為圖表列與里程碑在日期上加天數