輸入生日算實歲跟距離下次生日還有幾天,或算兩個日期之間相差多久。
| 距離下次生日 | |
| 總共活了幾天 |
如果自己手動算日期差或年齡,很容易忽略兩個細節:一是閏年,二是每個月天數不一樣(28、29、30、31 天交錯)。例如「今年 2 月」到底是 28 天還是 29 天,取決於年份是否為閏年(西元年能被 4 整除、但能被 100 整除卻不能被 400 整除的年份不算閏年,例如 1900 年不是閏年,但 2000 年是);如果用「每個月都當 30 天」這種簡化算法去估算,累積幾個月下來誤差就會越來越大。這個工具完全不用自己拆解年月日相減,而是把兩個日期都轉換成 JavaScript 的 Date 物件,再直接相減得到毫秒差,最後除以一天的毫秒數(86400000)換算回天數——這個做法是直接依賴瀏覽器內建的日曆換算邏輯,閏年、每月天數不同這些細節都已經被正確處理,不需要另外寫規則去判斷閏年。
計算實歲最容易犯的錯誤,是只用「今年 − 出生年」相減,忽略了「今年生日到了沒」這件事。例如 1995 年 8 月 20 日出生的人,在 2026 年 3 月時還沒過今年的生日,這時候如果只算 2026 − 1995 = 31 歲,其實是多算了一歲,正確答案要先確認「今天的月份日期」是否已經到達或超過「生日的月份日期」,沒到的話要再減 1,才是準確的實歲。這個工具的程式邏輯正是這樣處理的:先算出年份差,再比對月份與日期,如果今年的生日還沒到,就把年齡再減 1,這也是為什麼結果顯示的是精算過的「實歲」,而不是概略估計值。
假設生日是 2000 年 2 月 29 日(閏年才有的日期),計算到 2026 年 8 月 8 日:先算年份差 2026 − 2000 = 26,再看今天(8 月 8 日)有沒有超過生日的月日(2 月 29 日)——已經超過了,所以維持 26 歲,不需要再減 1。距離下次生日的天數,則是用「今年(或明年,如果今年的生日已經過了)的 2 月 29 日」減去今天的天數差;不過要注意,如果今年不是閏年,2 月就沒有 29 日,這時候瀏覽器的日期物件處理方式是自動把日期「進位」到 3 月 1 日,這是 JavaScript Date 物件本身的行為,也是為什麼 2 月 29 日出生的人,非閏年查到的「生日」實際上會落在 3 月 1 日。
下半部「日期差計算」是把結束日期減開始日期,如果選的結束日期比開始日期早,數學上算出來會是負數,但工具會用絕對值顯示天數(一律顯示正數),並在下方加註「結束日期早於開始日期」提醒你順序反了,避免你誤以為工具算錯。天數換算成週數是用無條件捨去(例如 10 天會顯示 1 週,不會四捨五入成 2 週),換算成月數則是用平均每月 30.44 天(365.25 天 ÷ 12 個月)概算,所以月數是約略值,僅供估算參考,不是精確的月曆月份差。
是實歲,也就是依照確切出生年月日精算,還沒過今年生日就不會加一歲的算法。台灣傳統習俗常用的「虛歲」(出生即算 1 歲,每逢過農曆年就加 1 歲)不是這個工具的計算方式,兩者會有 1 到 2 歲的落差是正常的。
工具背後使用的是 JavaScript 內建的 Date 物件,如果指定的年份沒有 2 月 29 日,日期會自動被進位成 3 月 1 日來處理,所以在非閏年查詢時,距離下次生日的計算會以 3 月 1 日為基準,這是瀏覽器日期功能本身的行為,不是工具算錯。
不會顯示負數,天數一律用絕對值呈現(例如相差 5 天就顯示「5 天」),但下方小字會加註「結束日期早於開始日期」,提醒你目前選擇的順序是反過來的,方便你確認是否選錯欄位。
「總共活了幾天」是精確的天數,直接用毫秒差換算,沒有誤差。但日期差計算裡的「約幾個月」是用平均每月 30.44 天概算出來的估計值,因為每個月實際天數不同(28–31 天),這個數字只能當作大概參考,不是精確對應到月曆上的月份數。
年齡計算的欄位如果沒選日期,結果不會出現(維持空白,不會跳出錯誤訊息)。日期差計算則是頁面載入時就會自動把開始日期跟結束日期都預設成今天,所以一開啟頁面就會看到「0 天」的結果,不需要手動輸入才有畫面。