Twitter 上看到一个 5 天前的主题贴,为什么 0 代表 1 月份?顿时勾起了我的好奇,曾经我也是有过这个疑问的人,今天是我最接近答案的一次。
没遇到过的话,可以打开浏览器的开发者工具,在控制台输入 new Date('2020-01-01').getMonth()
你得到的结果会是 0。
有个叫 Hillel is on vacation 的大佬在帖子下详细的描述了他探索这个问题答案的过程,从现代 C 语言的 time.h 开始,最早追溯到 1964 年的 Multics 分时操作系统源码,令人拍案叫绝。
整个过程简单地用流水账记一下:
首先,Javascript 这么做纯粹是因为借鉴了 C 语言。
在 The C Programming Language 一书中写到,time.h 里有个叫 tm 的数据结构,里面除了 tm_mday(day of the month) 是从 1 开始计算的,其它都是从 0 开始。为什么它这么特殊呢?在它的背后一定有故事。
在 The C Programming Language 第二版中有提到,time.h 来自 ANSI 标准 C89,关于 C89 有个有趣的事情