如果给出格式为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)) {
年龄——;
}
警报(年龄);
我有一个漂亮的答案,虽然它不是我的代码。不幸的是,我忘记了原来的帖子。
function calculateAge(y, m, d) {
var _birth = parseInt("" + y + affixZero(m) + affixZero(d));
var today = new Date();
var _today = parseInt("" + today.getFullYear() + affixZero(today.getMonth() + 1) + affixZero(today.getDate()));
return parseInt((_today - _birth) / 10000);
}
function affixZero(int) {
if (int < 10) int = "0" + int;
return "" + int;
}
var age = calculateAge(1980, 4, 22);
alert(age);
重要提示:这个答案并不能提供100%的准确答案,根据日期的不同,它会有10-20个小时的误差。
没有更好的解决方案(至少在这些答案中没有)。——纳文
我当然无法抗拒接受挑战的冲动,制作一个比目前公认的解决方案更快、更短的生日计算器。
我的解决方案的要点是,数学是快速的,所以不是使用分支和javascript提供的日期模型来计算解决方案,我们使用美妙的数学
答案是这样的,运行速度比naveen快65%,而且更短:
function calcAge(dateString) {
var birthday = +new Date(dateString);
return ~~((Date.now() - birthday) / (31557600000));
}
神奇的数字:31557600000等于24 * 3600 * 365.25 * 1000
也就是一年的长度,一年的长度是365天6小时,也就是0.25天。最后,我对结果进行了统计,得出了最终的年龄。
以下是基准测试:http://jsperf.com/birthday-calculation
要支持OP的数据格式,可以替换+new Date(dateString);
+新日期(d。Substr (0,4), d.substr(4,2)-1, d.substr(6,2));
如果你能想出一个更好的解决方案,请分享!:-)