以 YYYYMMDD 格式计算给定出生日期的年龄

新手上路,请多包涵

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

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

var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
  age--;
}
alert(age);

原文由 Francisc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

我会追求可读性:

 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 post 也可能是最准确的,因为它不依赖于一天中的时间。


原文由 André Snede 发布,翻译遵循 CC BY-SA 4.0 许可协议

试试这个。

 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/

原文由 naveen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题