为什么 new Date().getMonth()返回 0-11

2020-04-11 16:11:34 +08:00
 longjiahui

js 或 某些库,返回月份要用 0-11.

很迷惑啊喂😂

4716 次点击
所在节点    JavaScript
23 条回复
longjiahui
2020-04-11 16:13:07 +08:00
new Date().getDate() 返回了 1-31
cmdOptionKana
2020-04-11 16:36:56 +08:00
http://www.ccued.com/post/43.html

有一种看似十分说的通的民间解释:

因其它如年,日,时,分,秒都是数字,所以从 1 开始没什么问题。然而月份是有英文名称的 January 、February...,它们存于数组中["January","February",...],所以是从 0 开始就说的通了
yisiyisi
2020-04-11 16:37:42 +08:00
因为数组是从 0 开始的,便于对应每一个月份名字。
["January", "February", "March", "April", "May", "June", "July","August", "September", "October", "November", "December"]
而日期一般是没有对应的名字的。
azh7138m
2020-04-11 16:56:08 +08:00
tldr
抄的 Java

> This happened in 1995, and JDK 1.0 was in beta. It launched in 1996. In 1997, JDK 1.1 came out which deprecated the vast majority of functions on java.util.Date, moving them over to java.util.Calendar, but even that still had zero-based months.

详见
https://stackoverflow.com/questions/2552483/why-does-the-month-argument-range-from-0-to-11-in-javascripts-date-constructor
https://twitter.com/BrendanEich/status/481939099138654209
dorentus
2020-04-11 17:27:35 +08:00
考虑到 September, October, November, December 分别是七月、八月、九月、十月的意思,你就明白了,他们的普通人并没有汉语或日语母语者那么强的月份和顺序数字对应的意识。
xzh654321
2020-04-11 17:42:09 +08:00
Brendan Eich 解释过,早起他有很多很糟糕的想法……
littlewing
2020-04-11 17:57:07 +08:00
国外不说 1 月 2 月 3 月... 而是 January,February,March ...
可能是这样吧
JerryCha
2020-04-11 17:58:07 +08:00
小伙子,这就是 JavaScript 啊

@littlewing 西方按数字算也是 1-12 的。0-11 这是计算机的 convention 。
dangyuluo
2020-04-11 17:58:20 +08:00
这是 feature, feature
dangyuluo
2020-04-11 17:58:59 +08:00
@littlewing 美国也用 12/25/2019 这种日期记法
arthas2234
2020-04-11 18:13:40 +08:00
这个就是设计者的锅,但是已经普及开来了,改也改不了了
egfegdfr
2020-04-11 18:39:56 +08:00
涨知识了~~~
GuuJiang
2020-04-11 18:52:04 +08:00
@dorentus 你说的这个是历史原因,罗马历里只有十个月,后来的历法在前面插了两个月,而这几个月的名字顺延了下来,这个例子反而恰恰佐证了英语的月份也是从 1 开始的
yujiff
2020-04-11 21:17:30 +08:00
@dorentus “考虑到 September, October, November, December 分别是七月、八月、九月、十月的意思” 不对吧?
murmur
2020-04-11 21:20:07 +08:00
这就是 js 的 feature,记住就行,面试也可能当个考点
charlieputon
2020-04-11 21:46:04 +08:00
@yujiff xswl 。。。
zhanglintc
2020-04-11 21:57:17 +08:00
@yujiff #14 September 和 November 不确定, 不过你看前缀, Octo- 和 Dec- 还真就分别表示 "八, 八倍", "十, 十倍". 我记得是历法中, 是出现了一次硬插入了两个月还是什么情况, 导致全部后退了两个月, 所以本来表示"八"的 October 成了十月, 表示"十"的 December 变成了十二月
hantsy
2020-04-11 21:58:38 +08:00
基本所有的类 C 语言都是这么处理的,和 Index 相关都是从 0 开始。
Java 就 JDBC 比较变态,参数位置从 1 开始,其它好像记得都是 0 开始。
noobma
2020-04-11 22:26:03 +08:00
那 getDay 是 0-6 又咋说呢😂
christin
2020-04-12 00:51:09 +08:00
@cmdOptionKana 学到了学到了 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX