2014-12-05 2 views
0

Im пытаясь вычислить дату пользователя, но его не вычисляя правильный путьJavascript - Вычислить возраст

вот мой код

var cpr = cprValue.toString(); 

      //cpr is = 0102907896 

      var dd = cpr.substr(0, 2); // 01 
      var mm = cpr.substr(2, 2); // 02 
      var yy = cpr.substr(4, 2); // 90 

      //Calculate if 90 is > 50 
      if (yy>50) { 
       var year = 1900; 
      } else { 
       var year = 2000; 
      } 


      var curDate = new Date(); 
      var curYear = curDate.getUTCFullYear(), 
       curMonth = curDate.getUTCMonth(), 
       curDay = curDate.getUTCDate(); 


      var myAge = curYear % year; 

      if (curMonth < mm && curDay < dd || curMonth < mm && curDay === dd || curMonth == mm && `curDay < dd) {` 
       myAge -= 1; 
      } 

      console.log(myAge); 

Мой выход 13, но она должна быть 24

НО

, если я изменить дд, мм, уу и жестко его, как это

var dd = 01; 
    var mm = 02; 
    var year = 1990; 

Тогда он работает, а выход - 24 года. что я делаю неправильно здесь?

EDIT

Я попытался это вместо этого, но я все еще получаю 114, если мой год 1990, но если я хардкорных дата истечения его штраф: S

 var cpr = cprValue.toString(); 

     //cpr is = 0102907896 

     var dd = cpr.substr(0, 2); // 01 
     var mm = cpr.substr(2, 2); // 02 
     var yy = cpr.substr(4, 2); // 90 

     //Calculate if 90 is > 50 
     if (yy>50) { 
      var year = 1900; 
     } else { 
      var year = 2000; 
     } 

     var final = year + "-" + mm + "-" + dd; 
     console.log("Final: "+ final); 

     var alder = moment().diff(final, 'years'); 
     console.log(alder); 
+0

Мне нравится этот один: http://stackoverflow.com/a/15555947/265165 это самый короткий ответ, который вы можете получить. – thmshd

+0

var myAge = curYear% year; действительно ? он возвращает 114, если вы родились в 1900 году. –

+0

. Вы устанавливаете год либо в 1900 году, либо в 2000 году. Вы имеете в виду еще что-то вроде «var year = 1900 + yy» и то же самое для 2000 года. – thmshd

ответ

0

Вот способ:

function getAge(d1, d2){ 
    d2 = d2 || new Date(); 
    var diff = d2.getTime() - d1.getTime(); 
    return Math.floor(diff/(1000 * 60 * 60 * 24 * 365.25)); 
} 
console.log(getAge(new Date(1978, 10, 3))); 

решение есть здесь: javascript - Age calculation

Другое решение:

function calculateAge (birthDate, otherDate) { 
    birthDate = new Date(birthDate); 
    otherDate = new Date(otherDate); 

    var years = (otherDate.getFullYear() - birthDate.getFullYear()); 

    if (otherDate.getMonth() < birthDate.getMonth() || 
     otherDate.getMonth() == birthDate.getMonth() && otherDate.getDate() < birthDate.getDate()) { 
     years--; 
    } 

    return years; 
} 

Пример:

var age = calculateAge("02/24/1991", "02/24/2010"); // Format: MM/DD/YYYY 
+0

Не работает, когда наступает день рождения , например 'getAge (новая дата (1988, 8, 7), новая дата (2014, 8, 7))' дает 25, когда она должна давать 26 – Esailija

+0

Будьте осторожны с месяцем. Javascript подсчитывает их от 0. 1978, 10, 3 означает 3 ноября 1978. В любом случае я отредактировал свой ответ, и я добавил другое решение – MartaGom

0

В качестве альтернативы вы можете:

var result = document.querySelector('#results'); 
 

 
result.innerHTML += 'birthDate 2002/11/11, age today: '+ 
 
        age(new Date('2002/11/11')); 
 
result.innerHTML += '<br>birthDate 1944/12/15, age today: '+ 
 
        age(new Date('1944/12/11')); 
 
result.innerHTML += '<br>birthDate 1954/12/04, age today: '+ 
 
        age(new Date('1954/12/04')); 
 
result.innerHTML += '<br>birthDate 1954/12/06 age on 2013/12/03: '+ 
 
        age(new Date('1954/12/06'), new Date('2013/12/03')); 
 

 

 
function age(birthDate, forDate) { 
 
    forDate = forDate || new Date; 
 
    
 
    return (forDate.getFullYear() - birthDate.getFullYear()) 
 
      + 
 
      (forDate.getMonth() < birthDate.getMonth() || forDate.getMonth() == birthDate.getMonth() && forDate.getDate() < birthDate.getDate() ? -1 : 0); 
 
}
<div id="results"></div>

Смежные вопросы