2017-05-03 58 views
1

我有一个问题,我不知道什么是错的。JS - 日期问题与构造函数

new Date(2017,3,31).getDate() 返回1(如1.4,不31.3。)

new Date(2017,3,30).getDate() 返回30(如30.3。),这是正确的。

我错过了什么吗?

+0

月开始与'0'为'January',并用'11'的'December'结束[MDN:日期(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) –

+0

'3'是四月,并且没有四月三十一号。请务必阅读[MDN文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)。 –

+0

此问题标题不可接受;请描述这个问题。 –

回答

3

您可能预期3将是3月份,因为这是今年的第三个月。

的JavaScript个月从0开始:

0 - January 
1 - February 
2 - March 
... 

您要创建四月31日不存在。将其更改为:

new Date(2017, 2, 31).getDate(); // March 31st 
+0

ohhh我很笨拙:D 谢谢 –

+0

@OndraPernica嗯,我认为这个构造函数是含糊不清的,你不是第一个犯这个错误的...... :) – Mistalis

+0

它太诱人了。天数从1开始,在0 ..个月..但不好记住,从现在开始 –

5

JavaScript中的月份基于零,所以Date(2017,3,31)实际上是4月31日,这是不存在的。所以你最终会选择5月1日。

+0

5月如何“结束”?我认为编辑没有意义 – Hydro

+1

@Matheus - JavaScript说嘿,没有4月31日,所以这里是正确的一天。正如[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)所示:“如果值大于它们的逻辑范围(例如,13提供为(2013,13,1)相当于新的日期(2014,1,1),都会创建2014-02-01的日期(注意这个月是从0开始的)。“_ – j08691

+0

aaahh一想到它不是以索引(零)为基础的..我怎么会想念那个? :D 谢谢 –