【JavaScript】月の最終日を求める
更新日:2021/05/11
存在しない日付でDateオブジェクトを生成して最終日を求める
日付を指定してDateオブジェクトを生成する場合、存在しない日付を指定するとエラーになります。
new Date("2020/6/32");
// Invalid Date エラー
しかし、31日までなら次の月に換算してくれます。
new Date("2020/6/31");
// Date Wed Jul 01 2020 00:00:00 GMT+0900 (日本標準時)
Julは7月なので、上の例は2020年7月1日でDateオブジェクトが生成されたことになります。
この性質を利用することで、月の最終日を求めることができます。
月の最終日の求めかた
月の最終日を求めるには、31日から30,29…と順番にDateオブジェクトに変換していきます。
そのとき、getMonth()の返す値が対象となっている月と最初に一致する日が、月の最終日です。
const getLastDay = ( year , month ) => {
for( let i = 31 ; i > 27 ; i -- ) {
if( new Date( year , month -1, i ).getMonth() === month -1) return i;
}
}
console.log( getLastDay( 2000 , 2) ); // 29
Dateオブジェクトで月は1月を0、2月を1として扱います。
そのため、コード上では月からマイナス1しています。
次のようにfindを使用して書くこともできます。
const getLastDay2 = ( year , month ) => [31,30,29,28].find(
e => new Date( year , month -1, e ).getMonth() === month - 1
);
更新日:2021/05/11
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。