javascript - 年龄计算

use*_*820 12 javascript

有2个javascript日期,

第一个是生日,第二个是从该日期开始计算年龄的日期.

应该是最好的方法.

Mat*_*att 29

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;
}
Run Code Online (Sandbox Code Playgroud)

例:

var age = calculateAge("02/24/1991", "02/24/2010"); // Format: MM/DD/YYYY
Run Code Online (Sandbox Code Playgroud)

  • 对我而言,这是最优雅的解决方案.我总是看到程序员偶然发现并采取了大量计算......直到他们意识到人们如何确定某人的年龄:) (5认同)
  • 这绝对是更好的答案.任何在一年左右进行数学计算的计算都没有考虑到日期的任意性质:改变夏令时,闰年等的法律.让原生日期库处理这个问题; 你真的不想.否则,在他们的生日周围约一天做好准备. (3认同)

Mic*_*Mic 14

这是一种方式:

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)) );
Run Code Online (Sandbox Code Playgroud)

这个月要小心.Javascript从0开始计算它们
1978, 10, 3意味着1978年11月3日

  • 这不能正确处理闰年。 (2认同)
  • console.log( getAge(新日期(2001, 1, 28), 新日期(2004, 1, 28)) ); 这将返回 2,但应该返回 3。有大量示例不起作用。闰年逻辑要复杂得多,无法通过下限或其他舍入来解决。更复杂的结果是 1900 年和 2100 年左右,这两个年份不是闰年,因此有 7 年连续 365 天。 (2认同)

Din*_*ara 5

function getAge(dateString) {
  var now = new Date();
  var today = new Date(now.getYear(),now.getMonth(),now.getDate());

  var yearNow = now.getYear();
  var monthNow = now.getMonth();
  var dateNow = now.getDate();

  var dob = new Date(dateString.substring(6,10),
                     dateString.substring(0,2)-1,                   
                     dateString.substring(3,5)                  
                     );

  var yearDob = dob.getYear();
  var monthDob = dob.getMonth();
  var dateDob = dob.getDate();
  var age = {};
  var ageString = "";
  var yearString = "";
  var monthString = "";
  var dayString = "";


  yearAge = yearNow - yearDob;

  if (monthNow >= monthDob)
    var monthAge = monthNow - monthDob;
  else {
    yearAge--;
    var monthAge = 12 + monthNow -monthDob;
  }

  if (dateNow >= dateDob)
    var dateAge = dateNow - dateDob;
  else {
    monthAge--;
    var dateAge = 31 + dateNow - dateDob;

    if (monthAge < 0) {
      monthAge = 11;
      yearAge--;
    }
  }

  age = {
      years: yearAge,
      months: monthAge,
      days: dateAge
      };

  if ( age.years > 1 ) yearString = " years";
  else yearString = " year";
  if ( age.months> 1 ) monthString = " months";
  else monthString = " month";
  if ( age.days > 1 ) dayString = " days";
  else dayString = " day";


  if ( (age.years > 0) && (age.months > 0) && (age.days > 0) )
    ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old.";
  else if ( (age.years == 0) && (age.months == 0) && (age.days > 0) )
    ageString = "Only " + age.days + dayString + " old!";
  else if ( (age.years > 0) && (age.months == 0) && (age.days == 0) )
    ageString = age.years + yearString + " old. Happy Birthday!!";
  else if ( (age.years > 0) && (age.months > 0) && (age.days == 0) )
    ageString = age.years + yearString + " and " + age.months + monthString + " old.";
  else if ( (age.years == 0) && (age.months > 0) && (age.days > 0) )
    ageString = age.months + monthString + " and " + age.days + dayString + " old.";
  else if ( (age.years > 0) && (age.months == 0) && (age.days > 0) )
    ageString = age.years + yearString + " and " + age.days + dayString + " old.";
  else if ( (age.years == 0) && (age.months > 0) && (age.days == 0) )
    ageString = age.months + monthString + " old.";
  else ageString = "Oops! Could not calculate age!";

  return ageString;
}

// A bit of jQuery to call the getAge() function and update the page...
$(document).ready(function() {
  $("#submitDate").click(function(e) {
    e.preventDefault();

    $("#age").html(getAge($("input#date").val()));

  });
});

and HTML IS
Run Code Online (Sandbox Code Playgroud)

日期(MM / DD / YYYY): 计算年龄

年龄:7岁1个月15天。