在 JavaScript 中以 YYYY-MM-DD 格式計算給定出生日期的年齡
Tahseen Tauseef
2023年1月30日
2022年5月1日
- 在 JavaScript 中使用原生日期方法計算年齡給定 YYYY-MM-DD 格式的出生日期
-
在 JavaScript 中使用
Moment.js
庫以 YYYY-MM-DD 格式計算給定出生日期的年齡 - 使用 Vanilla JavaScript 以 YYYY-MM-DD 格式計算給定出生日期的年齡
本文將介紹如何以 YYYY-MM-DD 格式計算給定出生日期的年齡。
在 JavaScript 中使用原生日期方法計算年齡給定 YYYY-MM-DD 格式的出生日期
給定 YYYY-MM-DD 的出生日期,我們可以使用本地日期方法來計算一個人的年齡。
const calculateAge = (birthday) => {
const ageDifMs = Date.now() - new Date(birthday).getTime();
const ageDate = new Date(ageDifMs);
return Math.abs(ageDate.getUTCFullYear() - 1970);
}
console.log(calculateAge('1999-11-23'))
輸出:
22
單擊並訪問此連結以檢視上述示例的工作程式碼。
解釋:
- 首先,我們使用生日輸入構建了
calculateAge
函式,該函式需要一個日期字串進行轉換並用於計算年齡。 - 我們從函式中減去
Date.now
,其中包含當前日期時間的時間戳(以毫秒為單位)。 - 我們構建了一個新的 Date 例項。然後,我們呼叫
getTime
來獲取我們經過的生日的毫秒精度時間戳。 - 然後將結果分配給
ageDifMs.
- 然後,我們將
ageDifMs
提供給日期函式Object() {[native code]}
以接收ageDate,
,它是 1970 年 1 月 1 日午夜 UTC 形成的日期,加上由我們過去的時間。
在 JavaScript 中使用 Moment.js
庫以 YYYY-MM-DD 格式計算給定出生日期的年齡
我們還可以使用 Moment.js
庫來簡化日期計算。
const calculateAge = (birthday) => {
const startDate = new Date();
const endDate = new Date(birthday);
return Math.abs(moment.duration(endDate - startDate).years());
}
console.log(calculateAge('1999-11-23'))
輸出:
22
解釋:
- 我們在
calculateAge
函式中使用了生日引數,和以前一樣。 - 我們沒有使用本地日期方法,而是使用
moment.duration
方法確定持續時間。 - 為了獲取即時持續時間物件,我們用
endDate - startDate
呼叫它。 - 然後,我們用年數來表示時間長度。
- 然後,我們使用
Math.abs
再次檢查結果是否為陽性。 - 控制檯日誌應顯示與以前相同的資訊。
使用 Vanilla JavaScript 以 YYYY-MM-DD 格式計算給定出生日期的年齡
首先,我們獲取 HTML 檔案並建立一個 <div>
,為其提供一個佔位符 id,稍後將在 JavaScript 中呼叫 innerhtml
的函式時使用它。
<div id="placeholder">
<p>Changing Date of Birth in JavaScript</p>
</div>
然後,在 JS 文件中,我們首先建立一個變數 Date_of_Birth
來儲存一個人的出生日期。
var Date_of_Birth = "November 23, 1999";
var millisecondsBetweenDOBAnd1970 = Date.parse(Date_of_Birth);
var millisecondsBetweenNowAnd1970 = Date.now();
var ageInMilliseconds = millisecondsBetweenNowAnd1970-millisecondsBetweenDOBAnd1970;
var milliseconds = ageInMilliseconds;
var second = 1000;
var minute = second*60;
var hour = minute*60;
var day = hour*24;
var month = day*30;
var year = day*365;
//Age is coverted by using tag `math`
var years = Math.round(milliseconds/year);
var months = years*12;
var days = years*365;
var hours = Math.round(milliseconds/hour);
var seconds = Math.round(milliseconds/second);
function printResults(){
var message = "Age in Years : "+years+
"</br>Age in Months : "+months+
"</br>Age in Days : "+days+
"</br>Age in Hours : "+hours+
"</br>Age in Seconds : "+seconds+
"</br>Age in Milliseconds : "+milliseconds;
document.getElementById('placeholder').innerHTML = message;
}
window.onload = printResults;
輸出:
Age in Years : 22
Age in Months : 264
Age in Days : 8030
Age in Hours : 195551
Age in Seconds : 703983954
Age in Milliseconds : 703983954456
你可以使用此連結執行此程式碼。
解釋:
Date.parse()
函式解析日期字串並返回從 1970 年 1 月 1 日午夜到該日期的毫秒數。自 1970 年 1 月 1 日起,Date.now()
函式返回毫秒數。
我們以這些函式為起點。為了保持 DOB/NOW 和 1970 年 1 月 1 日之間的毫秒數,我們建立了兩個新變數 millisecondsBetweenDOBAnd1970
和 millisecondsBetweenNowAnd1970
。
然後,我們從 NOW 中減去 DOB 以找到一個人的年齡(以毫秒為單位)。當我們有一個人的以毫秒為單位的年齡時,我們必須實現一些基本邏輯來將其轉換為年、月、日、小時、分鐘和秒。