Рассчитать возраст на основе данных о дате рождения NaN - PullRequest
0 голосов
/ 07 июля 2019

В своем коде я пытаюсь определить возраст человека! Проблема в том, что он дает мне результат как "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 голосов
/ 07 июля 2019

Вы должны изменить значение параметров в соответствии со следующим кодом:

var mdate = birthDate; 
var yearThen = mdate.getFullYear(); 
var monthThen = mdate.getMonth(); 
var dayThen = mdate.getDate();
0 голосов
/ 07 июля 2019

ну, вам не нужно получать день, месяц, год, только разницу между датой, деленной на (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>
0 голосов
/ 07 июля 2019

вы можете рассчитать возраст с помощью этой

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

вам не нужны месяц, день .... если вам нужен месяц и день, используйте функции getYear (), getMonth (), getFullYear ()

0 голосов
/ 07 июля 2019

Так должна быть точная функция.наслаждайся кодированием.Ваш год и месяц приближались как NaN.Причина в том, что подстрока была неправильной на первом месте.Он давал символ, а вы конвертировали буквы в целое число, что невозможно.

Вот так выглядит ваша дата: Пн 30 мая 1994 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";
});
0 голосов
/ 07 июля 2019

Если вы проверите свое значение печати в консоли 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

...