重要提示:此答案不能提供100%准确的答案,根据日期的不同,可能会有大约10-20个小时的偏差。
没有更好的解决方案(至少在这些答案中没有)。--纳维恩
当然,我忍不住要接受挑战,制作一个比目前公认的解决方案更快、更短的生日计算器。我的解决方案的要点是,数学运算速度很快,所以我们不使用分支和日期模型javascript来计算解决方案,而是使用奇妙的数学运算。
答案看起来像这样,运行速度比纳维恩快65%,而且更短:
代码语言:javascript复制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);
使用+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
如果你能想出更好的解决方案,请分享!:-)