根据生日计算年龄 returns NaN

Calculate age based on birthdate returns NaN

在我的代码中,我试图获取此人的年龄!问题是它给我的结果是 "NaN"。我哪里错了?

$(document).ready(function() {
  var birthDate = new Date(1994, 04, 30);
  var mdate = birthDate.toString();
  var yearThen = parseInt(mdate.substring(0, 4), 10);
  var monthThen = parseInt(mdate.substring(5, 7), 10);
  var dayThen = parseInt(mdate.substring(8, 10), 10);

  var today = new Date();
  var birthday = new Date(yearThen, monthThen - 1, dayThen);
  var differenceInMilisecond = today.valueOf() - birthday.valueOf();
  var year_age = Math.floor(differenceInMilisecond / 31536000000);

  document.getElementById("currentAge").innerHTML = year_age + " Years Old";

});
<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <title>Age Calculator</title>
</head>

<body>
  <h1>
    <cenrter>Age Calculator</cenrter>
  </h1>

  Age:
  <div id="currentAge"></div>

  <p id="demo"></p>
</body>

</html>

如果您在 mdate, yearThen, monthThen 等的控制台中检查您的值打印,您会看到错误所在。
相反,您可以使用默认方法来获取这些值,如下所示:

    var birthDate = new Date(1994, 04, 30);
      var yearThen =birthDate.getFullYear();
      var monthThen = birthDate.getMonth();
      var dayThen = birthDate.getDate();

      var today = new Date();
      var birthday = new Date(yearThen, monthThen - 1, dayThen);
      var differenceInMilisecond = today.valueOf() - birthday.valueOf();
      var year_age = Math.floor(differenceInMilisecond / 31536000000);

  document.getElementById("currentAge").innerHTML = year_age + " Years Old";

勾选 jsFiddle

你可以用这个计算年龄

var year_age = Math.floor(today -birthDate / 31536000000);

你不需要月、日.... 如果您需要月份和日期,请使用 getYear()、getMonth()、getFullYear() 函数

确切的功能应该是这样的。 享受编码。 您的年份和月份为 NaN。原因是子串一开始就不正确。它给出了字符,而您正在将字母转换为整数,这是不可能的。

你的日期是这样的:1994 年 5 月 30 日星期一 00:00:00 GMT+0530(印度标准时间)

$(document).ready(function() {
    var birthDate = new Date(1994, 04, 30);
    var mdate = birthDate.toString();
    var yearThen = parseInt(mdate.substring(10, 15), 10);
    var mon = new Date(Date.parse(" May, 1, 2012")).getMonth() + 1;
    var monthThen = new Date(Date.parse(mdate.substring(3, 7) + ", 1, 2012")).getMonth() + 1;
    var dayThen = parseInt(mdate.substring(8, 10), 10);
    var today = new Date();
    var birthday = new Date(yearThen, monthThen - 1, dayThen);
    var differenceInMilisecond = today.valueOf() - birthday.valueOf();
    var year_age = Math.floor(differenceInMilisecond / 31536000000);
    document.getElementById("currentAge").innerHTML = year_age + " Years Old";
});

好吧,你不需要得到日、月、年只是日期除以 (365.25 * 24 * 60 * 60 * 1000)

之间的差异

var birthDate  = new Date(1994, 04, 30);
  var today = new Date();
  var year_age = Math.floor((today-birthDate)/ 31536000000);
$("#currentAge").html(year_age + " Years Old")
<!DOCTYPE html>
<html>

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <title>Age Calculator</title>
</head>

<body>
  <h1>
    <cenrter>Age Calculator</cenrter>
  </h1>

  Age:
  <div id="currentAge"></div>

  <p id="demo"></p>
</body>

</html>

您应该根据以下代码更改参数值:

var mdate = birthDate; 
var yearThen = mdate.getFullYear(); 
var monthThen = mdate.getMonth(); 
var dayThen = mdate.getDate();