Date difference when year is smaller than zero

If I'm executing this:

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

the output of date is Sun Oct 31 -125 00:00:00 GMT+0200 (W. Europe Summer Time)

If I check this on wolframalpha the day seems to be tuesday.

Can someone explain why not the same day is displayed by both source?

Upvotes: 0

Views: 205

Answers (3)

Racil Hilan
Racil Hilan

Reputation: 25361

The reason for the difference between JavaScript and wolframalpha website is that JavaScript is calculating the years mathematically, so it includes the year zero. Try to set the year to zero in JavaScript and you will see that it works. However, there is no such a thing as year zero, and the year before year 1 is year 1 BC. Try to set the year to zero on wolframalpha website and you get an error, while it automatically converts all negative years to years BC. This is the correct behavior.

To get the BC years in JavaScript, add 1 to every year below 1. So year 0 becomes 1BC, and year -125 becomes 126BC. In JavaScript this gives you Sunday, and 126BC on wolframalpha website gives you Sunday too. 125BC gives you Tuesday on wolframalpha website, and -124 gives you the same in 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());

Upvotes: 2

Luca De Nardi
Luca De Nardi

Reputation: 2321

Javascript dates start in 1970.

Let's do a quick count.

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

As you can see, you can't rely on negative dates in Javascript.

Upvotes: 0

bryan60
bryan60

Reputation: 29345

negative years in javascript do produce a BC date but it's kind of a poor design. Wolfram Alpha is probably correct. See this answer for more: Why does Date accept negative values?

Upvotes: 0

Related Questions