2017-08-28 4 views
-1

Date()オブジェクトで合計30日が必要です。Date()を使用しました。.setDate(.getDate()+30)で新しい日付を設定しました。それはconsole.log()で印刷したときに更新されたようですが、javascript日付()合計日ではなく月に

var myDate = new Date(); 

myDate.setDate(myDate.getDate() + 30); 

console.log(myDate); // will show 1 month ahead 
console.log("Next Month (wrong): " + myDate.getMonth()); // will thow this month! why??? 

var dateData = { 
    'day':(myDate.getDate() < 10) ? "0" + myDate.getDate() : myDate.getDate(), 
    'month':(myDate.getMonth() < 10) ? "0" + myDate.getMonth() : myDate.getMonth(), 
    'year':myDate.getFullYear() 
} ; 

console.log(dateData.year + "-" + dateData.month + "-" + dateData.day) ; 
// it sum date but not month 

PS、値を取得しよう:今日は、それがコンソールでの出力は以下となり07 する必要があります8月28 + 30日です:

Date 2017-09-27T18:07:56.101Z Scratchpad/3:14:1 
Next Month (wrong): 8 Scratchpad/3:15:1 
2017-08-27 // this should print 2017-09-27 but the month still 08 

間違って何?これはJavaScriptエラーまたはプログラマーの混乱ですか?

+1

アダムの答えは正しいのですが、サイドノートで...ありませんmutate Dateオブジェクト。ただしないでください。ちょうど新しいものを作ってください。あなた自身に恩恵を与え、日付はセッターを持っていないとふりまえます。 –

+0

私は@ JaredSmithに同意します。あなたは、https://momentjs.com/ – Adam

+0

@ JaredSmithのようなライブラリを使うほうがはるかに良いです。私はそれが良いアドバイスだとは思わない、あなたは推論された議論でそのようなアサーションをバックアップする必要があります。 – RobG

答えて

1

正しいです。 JavaScriptは0ベースのインデックスで月をカウントします。 0 = 1月、1 = 2月など9月は9月ではなく8月ですので、コードは正しいです。

これを試してみてください:

console.log(new Date().getMonth()); // During August, will be 7 

参照:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth

+0

そう、それはプログラマーの混乱= Dより悪い –

0

getMonth()関数が値を返す0から11に

+0

これは既存の答えとは違う....どう?同じドキュメントにリンクしています。 –

+0

十分に公正です。私は投稿する前に答えを見つけていなかった。 –

関連する問題