JavaScriptのgetMonthは先月与える


139

私は、Sun Jul 7 00:00:00 EDT 2013という形式で日付を指定する日付ピッカーを使用しています。月が7月と表示されていても、getMonthを実行すると、前の月が返されます。

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

何が悪いのですか?


14
うん...それはゼロインデックスです。
使者2013

2
JavaScriptの日付を忘れないでください。可能な場合はMoment.jsを使用してください
Valamas 2013

6
私はこれがどれほど本物であるか信じられ
ません

Moment.jsはdateDiffsを正しく実行できません。同じ月内にdateDiffsを実行している場合は問題ありませんが、2つの異なる月(つまり27-04-2018と24-05-2018)にわたって実行してみると、1日です。
rozza

1
試すまでお待ちくださいgetYear()!! ;-)
James Poulose

回答:


265

getmonth()は0から始まるためd1.getMonth() + 1


193
月数をゼロにインデックス化することは、私がしばらく見た中で最も馬鹿げたことです。'
LarryBud

5
getDateが1から31を与える場合、なぜ誰かが0に基づいてそれを望むのですか?
Abhinav Gauniyal

6
ほとんどの場合あなたがしd1.getMonth() < 12 ? d1.getMonth() + 1 : 1なければならないでしょう-そうでなければ12月は13になるでしょうか?
DanielKhan

7
@DanielKhanいや、それに1を加えることは正しく、これまで11以上の値を返すべきではありません、それ12. getMonth()関数になるだろうので、12月には、11になるので
unenthusiasticuser

7
@LarryBud、その理由はおそらく、いつものように常に数値として使用される日付の他の部分(日、年、時、分、秒...)とは逆であり、月はしばしばテキストに変換され、名前の配列。これはもちろん0ベースです。それは、40年以上前のC標準ライブラリの場合も同様でした。
jcaron 2017

19

getMonth()関数はゼロインデックスベースです。あなたがする必要がありますd1.getMonth() + 1

最近、Moment.jsライブラリを使用し、振り返ることはありませんでした。それを試してみてください!


10

変数を使用すると仮定

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

月は正確に+1を必要とし、0からカウントを開始します

d1.getMonth() + 1 // month 

対照的に...これらのメソッドはプラス1を必要としません

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

そして、それがそうでは.getDate()ないことに注意してください。getDay()

d1.getDay()       // day of the week as a 

お役に立てれば

これらの方法は歴史的な理由から一貫性に欠けると思います

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.