Roy*_*mir 6 javascript math datetime
我已经阅读了这个问题,但有很多评论说有些人认为这是准确的,有些人说它不准确.
无论如何,我有这个代码,在Javascript中计算人的年龄:
function calculateDiffYearByString(date)
{
var cur = new Date();
var diff = (cur.getTime() - new Date(date)) / (60 * 60 * 24 * 1000);
return diff / 365.242;
}
Run Code Online (Sandbox Code Playgroud)
现在,这部分var diff = (cur.getTime() - new Date(date)) / (60 * 60 * 24 * 1000); 确实考虑了从开始日期到结束日期的所有实际日期(24小时), 包括闰年考虑.
这只是24小时的团队计算天数.我的问题是关于/ 365.242;
当我问谷歌时,它说:

这就是我将其与365.242分开的原因.
但我觉得我错了.因为(恕我直言)该.242部分是关于闰年.所以我觉得我害怕闰年在整体计算中被考虑两次.
我错了吗?我的计算是100%正确吗?
该计算是不正确的,因为假设一年为365.242天。
一年平均为365.242天,但没有实际年为365.242天。一年恰好是365天或366天(忽略一些细节,有些年份会有leap秒。)
要将年龄精确地计算为小数年,您将必须计算到上一个生日为止的总年数,然后根据当年的多少天来计算当年的小数。
您可以使用如下代码来计算确切的年龄(以年为单位):
function isLeapYear(year) {
var d = new Date(year, 1, 28);
d.setDate(d.getDate() + 1);
return d.getMonth() == 1;
}
function getAge(date) {
var d = new Date(date), now = new Date();
var years = now.getFullYear() - d.getFullYear();
d.setFullYear(d.getFullYear() + years);
if (d > now) {
years--;
d.setFullYear(d.getFullYear() - 1);
}
var days = (now.getTime() - d.getTime()) / (3600 * 24 * 1000);
return years + days / (isLeapYear(now.getFullYear()) ? 366 : 365);
}
var date = '1685-03-21';
alert(getAge(date) + ' years');
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/Guffa/yMxck/
(请注意:天数也是一个小数,因此它将精确计算毫秒数。如果您希望整天都可以Math.floor为该days变量添加一个计算值。)