これはasked(ひどく)前です - その投稿の回答が実際に問題に対処したとは思わないし、それが古くなったと思います。問題の明確なデモンストレーションをしてもう一度尋ねようとします。確実に '次の/前の月'を実装する方法
Javascript Date.setMonth()
の実装は、最小の驚きの原則に従わないようです。ブラウザのコンソールでこれを試してみてください。同様に
d = new Date('2017-08-31') // Set to last day of August
d.getMonth() // 7 - months are zero-based
d.setMonth(8) // Try to set the month to 8 (September)
d.getMonth() // 9 - October. WTF Javascript?
:
d = new Date('2017-10-31')
d.getMonth() // 9
d.setMonth(8)
d.getMonth() // 9 (still?)
Linux上のFirefoxはさらに悪化表示されます - 時々は、その月一致しないgetMonth()
から10月の日付、および結果を返します!
私の質問(と私はそのリンクされた質問からOPのだと思います)は、次の/前の月機能を一貫してどのようにして一貫して実装するかです。デートピッカー?たとえば、9月に8月31日に開始して「次へ」をクリックすると、9月をスキップするなどしてユーザーを驚かせることはありません。 1月31日からの予定は、今のところ予測不可能です。うるう年かどうかによって、3月2日か3月3日のいずれかになります!
私の個人的な見解は、次の/前月のの最後の日に移動することです。しかし、それはsetMonth()
実装では、固定期間を加算/減算するだけでなく、問題の月の日数を気にする必要があります。 thisスレッドによれば、moment.js
アプローチは、30日でミリ秒数を加算/減算することであり、これはライブラリが同じ不一致を起こしやすいことを示唆しています。
ええ、私は思いついた解決策にかなり似ていると思います。あなたが目指していた月と同じではない月をチェックしましたが、変更された日をチェックすることはかなり同等です。 – dsl101