new Date(43 * 365 * 24 * 60 * 60 * 1000).toUTCString()
生成如下结果:
"Fri, 21 Dec 2012 00:00:00 GMT"
这个日期偏差了11天(与闰年有关)。因此,我试图通过数学计算来解决:
1970 * 0.2425 = 477.72499999999997
2013 * 0.2425 = 488.1525
Difference: 10.427500000000009
我注意到时间相差43年,43 * 0.2425等于10.4275,但是即使四舍五入只会得到10,这意义还是正确的。为什么JavaScript Date()对象偏差11天?
还有一件事 - 我也试过这个:
function test(y) {
return new Date((y * 365 + Math.round((y+1) * 0.2425)) * 24 * 60 * 60 * 1000).toUTCString();
}
这个方法看起来很有效,直到我遇到了2000年(test(30)),此时我得到的是"Sun, 02 Jan 2000 00:00:00 GMT"。我猜这是因为400年规则 - 但我认为这应该使用".2425"进行数学处理。我错过了什么,但不确定是什么。如果有帮助,请告诉我,谢谢。
更新:只是补充一下,我还在寻找一种数学计算(没有任何循环),可以告诉我传递给Date()对象所需的毫秒数(不使用Date对象本身!)。难道不能使用数学来计算给定年份的闰年,然后计算Date()所需的毫秒数吗?