如果给出格式为YYYYMMDD的出生日期,如何以年计算年龄?是否可以使用Date()函数?

我正在寻找一个比我现在使用的更好的解决方案:

Var dob = '19800810'; var年=数字(dob.)substr (0, 4)); var月=数字(dob.)Substr (4, 2)) - 1; var day =数字(dob.)2) substr(6日); var today = new Date(); var age = today.getFullYear() -年份; if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) { 年龄——; } 警报(年龄);


当前回答

$("#birthday").change(function (){


var val=this.value;

var current_year=new Date().getFullYear();
if(val!=null){
    var Split = val.split("-");
    var birth_year=parseInt(Split[2]);

    if(parseInt(current_year)-parseInt(birth_year)<parseInt(18)){

  $("#maritial_status").attr('disabled', 'disabled');
        var val2= document.getElementById("maritial_status");
        val2.value = "Not Married";
        $("#anniversary").attr('disabled', 'disabled');
        var val1= document.getElementById("anniversary");
        val1.value = "NA";

    }else{
        $("#maritial_status").attr('disabled', false);
        $("#anniversary").attr('disabled', false);

    }
}
});

其他回答

moment.js还有一个可能的解决方案:

var moment = require('moment');
var startDate = new Date();
var endDate = new Date();
endDate.setDate(endDate.getFullYear() + 5); // Add 5 years to second date
console.log(moment.duration(endDate - startDate).years()); // This should returns 5

我会选择可读性:

function _calculateAge(birthday) { // birthday is a date
    var ageDifMs = Date.now() - birthday.getTime();
    var ageDate = new Date(ageDifMs); // miliseconds from epoch
    return Math.abs(ageDate.getUTCFullYear() - 1970);
}

免责声明:这也有精度问题,所以这也不能完全信任。它可以关闭几个小时,几年,或在夏令时(取决于时区)。

相反,如果精度非常重要,我建议使用一个库。还有@Naveens的帖子,可能是最准确的,因为它不依赖于一天中的时间。


我在这里测试的所有答案(大约一半)都认为2000-02-29到2001-02-28是0年,而从2000-02-29到2001-03-01最有可能是1年,即1年零1天。这里有一个getYearDiff函数来修复这个问题。它只适用于d0 < d1:

function getYearDiff(d0, d1) {

    d1 = d1 || new Date();

    var m = d0.getMonth();
    var years = d1.getFullYear() - d0.getFullYear();

    d0.setFullYear(d0.getFullYear() + years);

    if (d0.getMonth() != m) d0.setDate(0);

    return d0 > d1? --years : years;
}
let dt = dob;

        let age = '';

        let bY = Number(moment(dt).format('YYYY')); 
        let bM = Number(moment(dt).format('MM')); 
        let bD = Number(moment(dt).format('DD')); 

        let tY = Number(moment().format('YYYY')); 
        let tM = Number(moment().format('MM')); 
        let tD = Number(moment().format('DD')); 


        age += (tY - bY) + ' Y ';

        if (tM < bM) {
            age += (tM - bM + 12) + ' M ';
            tY = tY - 1;
        } else {
            age += (tM - bM) + ' M '
        }

        if (tD < bD) {
            age += (tD - bD + 30) + ' D ';
            tM = tM - 1;
        } else {
            age += (tD - bD) + ' D '
        }
        
        //AGE MONTH DAYS
        console.log(age);

试试这个。

function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

我相信你的代码中唯一看起来粗糙的是substr部分。

小提琴:http://jsfiddle.net/codeandcloud/n33RJ/