为什么在 JavaScript 的 Date 构造函数中 month 参数的范围从 0 到 11?
当使用下面的调用在JavaScript中初始化新对象时,我发现月份参数从零开始计数。Date
new Date(2010, 3, 1); // that's the 1st April 2010!
为什么 month 参数从 0 开始?另一方面,月中的某一天参数(最后一个)是从 1 到 31 的数字。这有充分的理由吗?
当使用下面的调用在JavaScript中初始化新对象时,我发现月份参数从零开始计数。Date
new Date(2010, 3, 1); // that's the 1st April 2010!
为什么 month 参数从 0 开始?另一方面,月中的某一天参数(最后一个)是从 1 到 31 的数字。这有充分的理由吗?
这个问题的真正答案是,它是从 复制的,它也有这个怪癖。证据可以在Twitter上找到Brendan Eich - 最初实现JavaScript的人:java.util.Date
https://twitter.com/BrendanEich/status/481939099138654209
https://twitter.com/BrendanEich/status/771006397886533632
Brendan还表示,是Netscape的Ken Smith从Java进行了移植。
https://twitter.com/BrendanEich/status/771006208949891072
这发生在1995年,JDK 1.0处于测试阶段。它于1996年推出。1997年,JDK 1.1问世,弃用了绝大多数功能,将它们转移到 ,但即使这样仍然有零基月。受够了的开发人员创建了Joda-Time库,最终导致了Java 8(2014)的软件包。java.util.Date
java.util.Calendar
java.time
简而言之,Java花了18年的时间才获得一个正确设计的日期/时间API内置,但JavaScript仍然停留在黑暗时代。我们确实拥有优秀的库,如Luxon Moment.js,date-fns,js-joda等。但截至目前,该语言只不过是内置的。希望在不久的将来,随着 TC39 时间提案的提出,这种情况会有所改变。Date