给定 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);
} 
  • 首先,我们使用生日输入构建了 calculateAge 函数,该函数需要一个日期字符串进行转换并用于计算年龄。
  • 我们从函数中减去 Date.now,其中包含当前日期时间的时间戳(以毫秒为单位)
  • 我们构建了一个新的 Date 实例。然后,我们调用 getTime 来获取我们经过的生日的毫秒精度时间戳。
  • 然后将结果分配给 ageDifMs
  • 然后,我们将 ageDifMs 提供给日期函数 Object() {[native code]} 以接收 ageDate,,它是 1970 年 1 月 1 日午夜 UTC 形成的日期,加上由我们过去的时间。

下面是执行代码

console.log(calculateAge('2008-07-31'))

使用时的实例代码

<p id="placeholder">
<script>
    message = calculateAge("2008-07-31")
    document.getElementById("placeholder").innerHTML = message;
</script>

全部放一起,就是下面的效果:

<!-- 烨然Hvril/2024-08-09 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        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('2008-07-31'))
    </script>
    <p id="placeholder">
        <script>
            message = calculateAge("2008-07-31")
            document.getElementById("placeholder").innerHTML = message;
        </script>
</body>

</html>

执行后(依次是终端与HTML页面)

使用 Vanilla JavaScript 以 YYYY-MM-DD 格式计算给定出生日期的年龄

Vanilla JS——世界上最轻量的JavaScript框架(没有之一),其是一个快速、轻量级、跨平台的JavaScript框架。我们可以用它构建强大的JavaScript应用程序。

Vanilla JS是世界上最轻量的javascript 框架(沒有之一),使用我们的产品部署策略,你的用户的浏览器向你的站点发送请求前就已经把Vanilla JS加载在浏览器里了。

如果不放心,可以加入下面这行代码,但加不加其实效果一毛一样~

<script src="path/to/vanilla.js"></script>

如果你难理解的话,但看到这个的时候,你就知道他的亲切了

document.getElementById('test');

首先,我们获取 HTML 文件并创建一个 <p>,为其提供一个占位符 id,稍后将在 JavaScript 中调用 innerhtml 的函数时使用它。

<p id="placeholder">Changing Date of Birth in JavaScript</p>

然后,在 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 以找到一个人的年龄(以毫秒为单位)。当我们有一个人的以毫秒为单位的年龄时,我们必须实现一些基本逻辑来将其转换为年、月、日、小时、分钟和秒。

一个运用之后的实例代码

<!-- 烨然Hvril/2024-08-09 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        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;
    </script>
    <p id="placeholder">
</body>

</html>

——END——

© 版权声明
分享是一种美德,转载请保留原链接