年份小于零时的日期差异

时间:2017-10-31 13:01:21

标签: javascript date

如果我执行此操作:

var date = new Date("10.31");
date.setFullYear(-125);

date的输出为Sun Oct 31 -125 00:00:00 GMT+0200 (W. Europe Summer Time)

如果我在wolframalpha上查看,那么这一天似乎是星期二。

有人可以解释为什么两个来源都没有显示同一天?

3 个答案:

答案 0 :(得分:1)

JavaScript与wolframalpha网站之间存在差异的原因是JavaScript以数学方式计算年份,因此它包括零年份。尝试在JavaScript中将年份设置为零,您将看到它的工作原理。但是,没有像零年这样的东西,而前一年的年份是公元前1年。尝试在wolframalpha网站上将年份设置为零并且您会收到错误,同时它会自动将所有负数转换为BC年。这是正确的行为。

要在JavaScript中获得BC年,每年在1以下添加1.因此,0年变为1BC,年-125变为126BC。在JavaScript中,这给你周日,在wolframalpha网站上的126BC给你周日。 125BC给你周二wolframalpha网站,-124给你相同的JavaScript。

var date = new Date();
date.setFullYear(-124);
date.setMonth(9);
date.setDate(31);
console.log(date.toString());
date.setFullYear(-125);
console.log(date.toString());

答案 1 :(得分:0)

Javascript日期始于1970年。

让我们快速计算一下。

(new Date()).setYear(-125); //returns -66085584766591 (milliseconds from time 0)
//Let's convert those milliseconds in years...
//-66085584766591 = -2095,56 (years???)

如您所见,您不能依赖Javascript中的否定日期。

答案 2 :(得分:0)

javascript中的负面年份会产生BC日期,但它的设计很差。 Wolfram Alpha可能是正确的。有关详情,请参阅此答案:Why does Date accept negative values?