Javascript日期方法不一致-getDate与getMonth

Javascript日期方法不一致-getDate与getMonth,javascript,date,Javascript,Date,这让我昨晚有点头疼,我想了解为什么Date对象中的getDate方法是基于1的(返回值为1-31),而getMonth方法是基于0的(返回0-11)。我想知道为什么同一个对象的方法存在这种不一致性 我理解为什么现在很难改变这种行为,但有没有什么理由一开始就这样设计呢 可以在这里找到文档:在JavaScript中,计数器从零开始 月份不一定要用数字表示。“月”是一个可数的序列。该序列的第一个元素由零表示 在现实生活中,天数由一个固定数字表示。虽然天也是可数的,但将第一天表示为零将非常混乱。很难说,

这让我昨晚有点头疼,我想了解为什么Date对象中的getDate方法是基于1的(返回值为1-31),而getMonth方法是基于0的(返回0-11)。我想知道为什么同一个对象的方法存在这种不一致性

我理解为什么现在很难改变这种行为,但有没有什么理由一开始就这样设计呢


可以在这里找到文档:

在JavaScript中,计数器从零开始

月份不一定要用数字表示。“月”是一个可数的序列。该序列的第一个元素由零表示


在现实生活中,天数由一个固定数字表示。虽然天也是可数的,但将第一天表示为零将非常混乱。

很难说,但我怀疑Month是基于0的,因此它可以很容易地用作保存月份名称的Month数组中的索引器

var months = new ["Jan", "Feb", ....]
months[new Date().getMonth()];

我认为月份是基于0的,因为当JavaScript语言被设计时


编辑Oracle删除了旧的Java文档,有。

所以我给Brendan Eich发了一条推特,问他这个问题(针对那些不知道他是JS的创建者的人),他的回答是:

@因为java.util.Date就是这样做的


“月份不一定要从1开始”-这句话我觉得很难理解。@Tomalak这么说,我的意思是月份可以用“一月”等表示。我想不出任何其他方法来表示月份的天数。另一方面,一周中的几天也可以用“星期日”等表示。它也从零开始计数。但在现实生活中,月份也用固定数字表示。@DanGoldin将“不一定要从1开始”改为“不一定要用数字表示”。“周从星期日开始”这也是我觉得很难理解的无论如何,通过这个论点,你可以说有一个月
0
标记为
'一月'
,一个工作日
0
标记为
'Sunday'
和一个日期
0
标记为
'1'
,这个标签碰巧是一个数字。至少这是一致的。这显然没有什么意义,这只是“其中之一”。相关:给他发一条推特,问问他,我很想听到他的回答,这也让我抓狂!(我说的“他”是指创建者)雷尔:我想我的问题变成了为什么它在Java中以这种方式实现?@DanGoldin:我期待着这样的回答。我只能猜测:因为他们认为当当前日期为
13
时,从
getDate()
返回
12
会让人困惑。他们还决定,
for(m=0;m@Tomalak:根据Brendan Eich的回复,您似乎是正确的-甲骨文,2014年:很抱歉,您请求的页面未找到。例如::-@Tomalak链接已关闭。这是一个非常有趣的解释-谢谢!我仍然认为它是坏的设计来实现它是基于0的,因为你怀疑人们会想把它映射到一个数组。我认为最好是将其保持在1,然后让用户决定减去1,如果他们想在数组中索引他们。我不是说这是一个好的设计-我只是认为这可能是原因。日期也可以
var dates=[1,2,3…31]
这与
getDay
是一致的,它也是基于零的,可能用于数组索引。好吧,新问题:Java为什么这样做?(“因为C就是这样做的!”…好吧,为什么C会这样做?…?)@Noyo因为使用基于零的计数可以索引到数组中。