根据生日返回NaN计算年龄

时间:2019-07-07 08:48:46

标签: javascript html calculator

在我的代码中,我试图了解这个人的年龄!问题是它给我的结果是“ 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>

5 个答案:

答案 0 :(得分:0)

如果您要在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

答案 1 :(得分:0)

您可以以此计算年龄

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

您不需要月,日...。 如果您需要按月使用getYear(),getMonth(),getFullYear()函数

答案 2 :(得分:0)

这应该是确切的功能。 享受编码。 您的月份和月份是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";
});

答案 3 :(得分:0)

好吧,您不需要获取日,月,年之间的日期差除以(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>

答案 4 :(得分:0)

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

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