日期很簡單,直到沒有為止,這就是為什麼 RFC 3339 存在是為了確定時間戳在網路上的含義。
我發貨的第一個年齡錯誤是註冊表格的。這條規則在紙面上很簡單:用戶必須至少年滿 18 歲。實現是每個人在第一次通過時寫下的實現 - 取兩個時間戳之間的差值,除以 365.25 天,將其放下。它在測試中發揮了作用,因為測試裝置是 20 世紀 80 年代的生日,可以輕鬆地避開邊界。對於 2 月 29 日出生的一位用戶來說,它生產失敗,他被告知他在 18 歲生日那天早上才 17 歲。可以理解的是,他並不高興。
這就是年齡的問題。每個人都知道這意味著什麼,沒有人同意如何計算它,而樸素的版本是錯誤的,它只出現在邊界上--閏日、月底、生日前一天。一年不是365天。一個月不是30天。 & 引用; 1 月 31 日後一個月& 引用;沒有一個正確答案,你選擇的答案會改變結果。這一切都不重要,直到它發生:直到你檢查資格,填寫一份想要&引用的表格;年、月、行;計算退休金日期,或向使用者解釋您的表格認為他十七歲的原因。
我以建立開發人員工具為生 - [toolz。dev](/,WP Adminify 插件,一堆 Laravel 和 React 應用程式 - 日期算術是我學會停止手動執行的錯誤類別。 年齡計算器 在 toolz。dev 上,取得出生日期和目標日期,並給出確切的年齡(以年、月和日為單位),這些年齡是用真實日曆算術而不是平均月近似值計算的。它還為您提供人們實際要求的總數 - 多少天、幾周、幾小時 - 加上您出生的工作日以及下一個生日的倒數計時。
本指南解釋了該工具的作用、下面的算術如何運作以及真正困難的情況在哪裡。如果您只想要數字,只需單擊即可計算器。如果您曾經必須向合規官員捍衛年齡計算,請閱讀深度潛水。
TL;DR: 確切的年齡是年,然後是月,然後是天,天數是從上個月的真實長度借來的--而不是從 30 天的平均值借來的。計算閏日。 2 月 29 日的生日被視為非閏年的 3 月 1 日。這 年齡計算器 應用所有瀏覽器,顯示天數、週數、小時數和分鐘的總數,並且絕不會將您的出生日期發送到任何地方。
主要特點
日曆正確的年份、月份和日期
標題數字是精確的細分:33年11個月28天。不&報價;33.97 年,&報價;不是&報價; 407 個月,&報價;但表格和註冊商要求的三部分數字。天數部分是透過借用目標日期前一個月的實際長度來計算的。如果您在 3 月 14 日進行測量,則借入的是 2 月份 - 大多數年份為 28 天,閏年為 29 天 - 不是名義上的 30 天月份。這個單一細節是與日曆相符的結果與根據季節漂移一兩天的結果之間的差異。
閏年和 2 月 29 日處理
閏日計入每個總數,2 月 29 日的生日案件是明確處理的,而不是偶然處理的。計算器將閏日生日視為沒有 2 月 29 日的年份中的 3 月 1 日,並且在輸出中如此表示,而不是默默地代表您做出決定。這是普通法司法管轄區最常用的慣例,並且它一致地適用於年齡細分和下一個生日倒數計時,因此兩者永遠不會相互矛盾。
完整總計細分
在標題下,您可以獲得人們實際搜尋的數字:總月數、總週數、總天數、總小時數和總壽命分鐘數。其中每一個都源自於兩個日期之間的確切日曆距離,因此包括閏日,並且沒有任何內容透過 " 進行四捨五入;平均年份和報價; 365.25 天。如果您出生於 2000 年 1 月 1 日,那麼您在 2025 年 1 月 1 日已經 9,132 天了 - 二十五年 365 天加上其間的 7 個閏日。
下一生日倒數計時
該工具報告您下一個生日的日期、工作日、您要轉的年齡以及還剩多少天。工作日比聽起來更重要:知道生日落在兩年後的星期二是計劃某些事情和前一周發現問題之間的區別。如果目標日期是生日本身,工具會這樣說,而不是向前滾動一整年。
任何日期的年齡,而不僅僅是今天
第二個欄位預設為今天,但完全可編輯。將其設定為過去的日期來回答和引用;政策開始時她多大了,&引用;或到未來的日期來回答和引用;按報名截止,他是否已十六歲。&引用;資格規則幾乎總是以特定日期的年齡來表述,而在你的腦海中執行算術正是錯誤蔓延的地方。
明確的驗證,而不是沉默的錯誤答案
無法解析的日期、不可能的日期(例如 2 月 30 日、13 個月或目標日期之後的出生日期)都會產生特定的錯誤訊息。計算器不會傳回負年齡,an Invalid Date,或者 NaN. 準確地被告知輸入的問題所在比您無法信任的數字更有價值。
100% 客戶端
每個計算都在您的瀏覽器中以簡單的 JavaScript 運行。您的出生日期永遠不會上傳、記錄或儲存。對於該工具來說,這比大多數工具更重要:出生日期是身份驗證系統鍵入的三到四個字段之一,並將其貼到伺服器端計算器中,您沒有閱讀其隱私權政策是一個小而可避免的風險。頁面載入後,該工具根本無法連接網路。
如何使用年齡計算器
第 1 步:輸入出生日期
在第一個欄位中輸入或選擇日期。任何日曆日期都可以 - 包括 2 月 29 日,包括一個多世紀前的日期。該欄位採用 ISO YYYY-MM-DD value,即本機日期選擇器產生的值,因此您可以直接鍵入或使用選擇器。如果您貼上計算器無法解析的內容,它會告訴您預期的格式而不是猜測。
第 2 步:設定您要測量的日期
第二個字段,&引用;按日期年齡,&引用;預設為今天。不考慮常見情況:我現在多大了。當問題涉及不同的時刻時更改它 - 合約簽署之日、考試截止時間、學年開始、退休日期或您正在重建的過去日期記錄。唯一的限制是它必須落在出生日期或之後;計算器拒絕相反的情況並解釋原因。
第三步:閱讀細分
按"計算",結果分為三個部分。頂部是確切的年齡(以年、月和日為單位),以及計算之間的兩個日期。下面有兩張卡片:您出生的工作日,以及您的下一個生日及其日期、工作日、您要轉的年齡以及剩餘的天數。在底部,總表 - 月、週、日、小時和分鐘 - 每個都帶有一個簡短的註釋,準確解釋其計數,因為 "總月"和"總天數和報價;計算方式不同,值得明確。
第四步:複製摘要
複製按鈕會在剪貼簿上顯示純英文摘要:年齡、目標日期、出生工作日以及總天數。這是您貼上表格、電子郵件、支援票或記錄時想要的格式。然後更改任一日期並再次計算 - 沒有狀態可重置,也沒有往返伺服器的狀態。
技術深度潛水:為什麼年齡算術比看起來更難
一年不是365天,一個月不是30天
公曆年平均長度為 365.2425 天。這就是為什麼我們在可被4 整除的年份中插入閏日,在可被100 整除的年份中跳過它,並在可被400 整除的年份中恢復它- 這就是為什麼2000 年是閏年,而1900 年不是。年齡算術的結果是直接的:如果你用經過的日子除以 365 來計算年齡,你大約每四年就會增加一天,而你的計算將與生日附近測量的任何人的日曆不一致。除以 365.25 更好,但仍然錯誤,因為它會偏離世紀邊界。
月份問題更嚴重,因為月份不僅不規則,而且含糊不清。月份是 28、29、30 或 31 天。沒有可辯護的平均值。任何處理"的計算;一個月&報價;因為固定的天數會產生與人類指望日曆時所說的年齡不一致的年齡。
場減法演算法
正確的方法根本不轉換為天數。它是逐個字段減去,當字段變為負時借用,就像您手動減去兩個多位數一樣。
出生日期為1990年3月15日,目標為2024年3月14日:
- 年份:2024 年 - 1990 年 = 34
- 月份:3 - 3 = 0
- 天數:14 - 15 = -1
天數欄位為負數,因此借用一個月。關鍵問題是: 一個月有多少天? 答案是目標日期前一個月的長度。目標是2024年3月,所以上個月是2024年2月,有29天,因為2024年是閏年。借款給出:
- 月份:0 ± 1 = ±1
- 天數:-1 + 29 = 28
現在月份欄位為負,因此借一年:第 34 年 - 1 = 33 年,第 1 個月 + 12 = 11 個月。最終答案是 33年11個月28天 - 距離 34 歲生日還有一天,這是完全正確的。
你可以反過來說驗證:1990年3月15日加33年是2023年3月15日。加11個月是2024年2月15日。2024年2月15日至3月14日是2月底的14天(當年有29天))加上 3 月 14 天,即 28。兩種方法一致,這是您想要的日期演算法的屬性。
請注意這暴露的陷阱。如果在非閏年(1990年3月15日至2023年3月14日)進行相同的計算,借款將來自2月的28天,答案將是33年11個月 27 天。與生日的關係相同,天數不同,因為中間的月份長度不同。這不是錯誤。這就是"月、日"意思是。
為什麼借錢有時還不夠
這是破壞大多數手動滾動實現的情況。出生日期2023年1月31日,目標2023年3月1日:
- 天數:1 - 31 = -30
- 借款二月(28 天):-30 + 28 = -2
仍然是負數。每當一個月的出生日超過目標前一個月的長度時,單次借貸是不夠的。修復方法是再次借貸,從前一個月 - 1 月,31 天 - 給出 29 天和 0 個月。答案是 0 年 0 個月 29 天,這正是兩個日期之間的日曆天數。如果您的實施恰好借用一次,它將為這些輸入發出負天數字段,直到 31 日出生的用戶提出投訴之前,沒有人會注意到。
為什麼&引用;一個月後&引用;沒有一個正確答案
1 月 31 日之後一個月是多少?有兩個站得住腳的答案,但標準並不能解決:
- 夾緊: 回滾到目標月份的最後一個有效日期 - 2 月 28 日(或閏年的 29 日)。這是大多數電子表格
EDATE函數和許多日期庫都可以。 - 向前滾動: 溢出到下個月 - 3 月 3 日。這就是天真的
setMonth()算術在 JavaScript 中確實如此,這就是為什麼這麼多日期錯誤看起來像是三天後的錯誤。
兩者都沒有錯,但它們不能同時在同一系統中使用。年齡計算器一致地應用向前滾動約定,因為正是這種約定使2 月29 日規則保持一致:如果29 日的月度週年紀念日滾動到3 月1 日,那麼31 日的月度週年紀念日滾動到下個月也滾動到3 月1 日。上面的借用演算法恰好產生了這種行為,沒有任何特殊情況,這是更喜歡它的原因之一。到處應用的單一規則可以擊敗一堆例外。
2月29日的問題
大約 1,461 人中有一個出生在閏日。四年中的三年,他們的生日並不存在。司法管轄區必須決定要做什麼,但他們並沒有都決定同一件事。
根據英國和美國大多數州使用的普通法規則,一個人在一天開始時就達到了給定的年齡 之前 他們的生日週年紀念日--一個巧妙地創造了一個閏日嬰兒的小說'法定生日為非閏年的 3 月 1 日。其他幾個系統透過不同的途徑得出相同的答案,認為週年紀念日是二月最後一天的第二天。相比之下,紐西蘭和台灣部分地區使用 2 月 28 日。香港' 《解釋及通則條例》和其他幾項法規明確選擇並寫下來,這是明智的做法。
年齡計算器使用 3 月 1 日,在適用時在輸出中說明它,並將其一致地應用於年齡細分和下一個生日倒數計時。因此,2000 年2 月29 日出生的人在2023 年2 月28 日年滿22 歲11 個月零30 天,在2023 年3 月1 日年滿23 歲。如果您當地的規定是2 月28 日,請從倒數中減去一天;無論哪種方式,總天數都不會受到影響,因為它們是純粹的日曆距離。
不同的系統如何計算年齡
上述一切都假設實際年齡從出生那一刻起就計算在內--國際標準,以及幾乎所有法律和醫療系統現在使用的標準。它並不是唯一存在的系統。
傳統的東亞年齡計算將新生兒視為出生時一歲,並在農曆新年而不是個人生日時為每個人增加一歲。新年前一天出生的嬰兒將在兩天後被視為兩歲。韓國在日常生活中保持這種做法的時間最長--同時還有一個單獨的"日曆年齡和報價;用於學校教育和徵兵--直到 2023 年 6 月,當時韓國對國際年齡進行了法律標準化,並在當天的報告中使全體人口在一夜之間年輕了一兩歲。中國、日本和越南早在幾十年前就已進入國際時代,儘管傳統計數在文化和占星學背景下仍然存在。
另外兩個計算結果也值得了解,因為它們出現在真實文件中。 孕齡產科使用時,從末次月經的第一天開始計算,而不是受孕,並且比胚胎年齡提前兩週左右。和 上一歲生日的年齡 與 最近的生日年齡 這是保險承保中的一個即時區別:有些保單根據您最近轉的年齡定價,有些保單根據您最接近的年齡定價,對於生日後六個月以上的任何人來說,年齡可能會相差一整年。如果表格詢問您的年齡,答案在經濟上很重要,那麼值得知道這意味著哪一個。
時區,以及為什麼這個工具忽略它們
出生日期是日曆日期,而不是瞬間。如果你將其儲存為時間戳並在不同的時區渲染,它可以移動一天 - 這是經典的錯誤,其中一個半球的用戶將生日顯示為 14 日,另一個半球的用戶顯示為 15 日。年齡計算器透過在 UTC 中對午夜錨定日期進行所有算術來完全避開這一點。夏令時轉換會增加或刪除一個小時,無法將日期推過午夜邊界,無論您坐在哪裡,工作日的出生數字都是穩定的。小時和分鐘總數在午夜到午夜進行計算的原因相同:它們是天數的精確倍數,而不是掛鐘測量值。
常見用例
資格和截止日期
幾乎每一條涉及年齡的規則都被表述為特定日期的年齡。學校入學截止日期、駕駛執照資格、年齡限制銷售、退休金資格、保險等級、最低服務年齡。問題從來不是&報價;這個人多大了&報價;但是&報價;這個人在相關日期多大了,&報價;可編輯的目標欄位是全點。設定截止日期並讀取年份數字。
需要數年、數月的表格
移民申請、醫療入學表格、學校記錄和居住文件通常會要求年齡(以歲和月為單位),或年、月和天為單位。這沒有捷徑,也無法從十進制年齡推導出來。它必須正確計算,並且必須匹配接收辦公室計算的任何內容,這就是為什麼日曆借用方法很重要 - 這就是表格另一端的人正在做的事情。
將年齡邏輯建置到應用程式中
如果您正在實施年齡檢查,則規則是:切勿將經過的毫秒除以年份常數。比較日曆欄位。最少的正確 18 歲以上檢查是建立出生日期後整整 18 年的日期,並測試今天是在出生日期還是出生日期之後 - 然後故意決定您的系統在 2 月 29 日做什麼。我用 年齡計算器 當我編寫這些測試時產生邊界固定裝置:生日前一天、閏日案例當天、每月 31 個案例。四個測試案例基本上捕捉到了每個達到生產的年齡錯誤。
里程碑、週年紀念日和 "多少天"問題
一萬天前是一個真正的里程碑,大約在你二十七歲生日左右。十億二歲生日大約是31.7歲。總表直接回答了這些問題,而工作日的出生數字回答了人們總是問的其他問題。下一個生日倒數計時及其工作日對於規劃幾週後的任何事情確實很有用。
重建記錄
當您審核歷史資料(醫療記錄、薪資條目、舊合約)時,您通常需要知道某人在過去幾年約會時的年齡。明確設定這兩個字段,工具可以回答它,而無需對 " 做出任何假設;現在。&引用;這也是檢查遺留系統是否正確的最快方法'根據我的經驗,儲存的年齡欄位是一個值得問的問題。
為什麼要在瀏覽器中計算年齡?
工具中的每個計算z。dev 年齡計算器 運行客戶端。您輸入的任何內容都不會被傳輸、記錄或存儲,並且頁面在加載後無需網絡連接即可繼續工作。出生日期不是中立的資料 - 它是身份檢查、密碼重置和信用應用程式鍵入的欄位之一。沒有理由將其交給伺服器只是為了進行瀏覽器可以在一毫秒內完成的減法。
如果您的工作涉及生日以外的日期,則 日期差計算器 處理一般區間情況,並且 時間戳轉換器 是當日期被困在日誌中的 Unix 紀元值中的工具。對於所有數字, 百分比計算器 涵蓋了日常算術的另一半,很容易犯一些微妙的錯誤。
問號
如何計算我的確切年齡,以年、月和天數計算?
按欄位從目標日期減去出生日期:年,然後是月,然後是天數。 如果日期為負數,則借用目標日期前一個月的天數;如果月份為負數,則從年借 12 個月。 在計算器中輸入您的出生日期,它會自動應用該借用,因此結果與日曆而不是平均月估計相符。
為什麼我的年齡天天數會根據月份而變化?
因為月份的長度不一樣。從 2 月 28 日借來的天數與從 1 月 31 日借來的天數不同,因此同一個人可以是 " 3個月2天"一個月內和" 3個月5天"在同一時間段之後的另一個時間。年份和總天數是明確的;只有剩餘月份加天數取決於您穿越的月份。
計算器如何處理 2 月 29 日的生日?
2 月 29 日的出生日期被視為 3 月 1 日的下降,年份沒有 2 月 29 日。 因此,2023 年 3 月 1 日出生於 2000 年 2 月 29 日 23 日,2023 年 2 月 28 日出生的人,仍是 22 歲 11 個月 30 天。 這與大多數普通法司法管轄區適用的規則相符,其中週年紀念是二月最後一天之後的第二天。
跳躍年是否包含在總天數中?
是的。 總天數是根據兩個日期之間的實際日曆距離計算,因此每 2 月 29 日的間隔計算。 這就是為什麼總天數除以 365 天不會完全等於您的年齡 - 格里高利平均年長為 365.2425 天。
我可以在未來或過去日期計算我的年齡嗎?
是的。 第二個日期欄位預設為今天,但可以設定為出生日期後的任何日期。 這是您在截止日期 - 入學、保單開始日期、許可證資格日期或合約簽署時檢查年齡的方式 - 無需自己做算術。
我的年齡在世界各地都一樣嗎?
不一定。大多數國家使用從出生開始計算的實際年齡,這就是該計算器返回的內容。傳統的東亞年齡計算將新生兒計算為一歲,並在每個農曆新年增加一歲,這可能使某人達到兩歲"年長&引用;比他們的實際年齡。韓國於 2023 年 6 月合法標準化國際年齡,但傳統計數仍出現在文化背景下。
我出生在一週的哪一天?
計算器直接報告出生日期的工作日。 它源自格里高利日曆,因此對於採用日曆後的任何日期都是準確的,它不取決於您當地的時區,因為所有算術都是在 UTC 中完成的。
我的出生日期是儲存還是發送到任何地方?
不 。 計算器完全在您的瀏覽器中運行,並使用普通的 JavaScript。 您輸入的任何內容都沒有傳輸、記錄或儲存,一旦頁面載入,該工具繼續在沒有網路連線的情況下工作。



