History of Zero-based Months?

August 24th, 2022
history, tech
JavaScript is a language of many silly things, and one of them is:

> new Date()
Wed Aug 24 2022 ...
> new Date().getFullYear()
2022
> new Date().getMonth()
7
> new Date().getDate()
24

It represents 2022-08-24 as (2022, 7, 24). One-based indexing for the year and day, but zero-based indexing for the month.

In this case, however, the problem was copied from Java:

getMonth: The value returned is between 0 and 11, with the value 0 representing January.

getDate: The value returned is between 1 and 31 representing the day of the month.

I'd love to blame Java, but they seem to have copied the problem from C:

localtime(3):
tm_mday: The day of the month, in the range 1 to 31.
tm_mon:  The number of months since January, in the range 0 to 11.

Looking at the Unix History repo, the first mention of "month (0-11)" is in 1973's Research Unix V4:

The value is a pointer
to an array whose components are
.s3
.lp +5 5
0      seconds
.lp +5 5
1      minutes
.lp +5 5
2      hours
.lp +5 5
3      day of the month (1-31)
.lp +5 5
4      month (0-11)
.lp +5 5
5      year \*- 1900
.lp +5 5
6      day of the week (Sunday = 0)
.lp +5 5

While this may have been an original decision by Dennis Ritchie, it's also possible it was copied from an even earlier system. Does anyone know?

Comment via: facebook, lesswrong, hacker news, substack

Recent posts on blogs I like:

Linkpost for July

Effective Altruism

via Thing of Things July 3, 2026

Agentic test processes, LLM benchmarks, and other notes on agentic coding from Galapagos Island

I've been using AI fairly heavily since last November and the whole thing is a funny experience. An agent will do something that, if a human did it, you'd immediately fire them. My reaction, of course, is to act as if this is great and spin up a t…

via Posts on July 3, 2026

Variable fonts aren't universally supported

I make a lot of webpages. I also use Lockdown Mode on iOS and MacOS for a bit of extra security. Sometimes I realize that I forgot to test on Safari and it looks like crap, or I test and don’t notice that there’s been a problem for months (as was the case…

via Home June 27, 2026

more     (via openring)