2017-05-03 57 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 謝謝 –