日付・時刻

【JavaScript】 うるう年判定の一番簡単な方法

更新日:2021/05/10

うるう年を判定するとき、西暦から計算で求めるのが一般的です。
しかしJavaScriptは既存のオブジェクトメソッドを一工夫することでうるう年判定可能です。

 

Dateオブジェクトを使用したうるう年判定

Dateオブジェクト作成時に2月29日を指定した場合、うるう年でなければ3月1日となります。

そこで、次のようなコードでうるう年かどうかを判定できます。

うるう年判定関数


const isLeapYear = year =>
        new Date( year + "/2/29" ).getMonth() === 1;

getMonth()は1月が0、2月が1なので、結果が1かどうかを比較しています。

 

一般的なうるう年判定

上記の関数はDateオブジェクトの作成がおこなわれるため、繰り返し呼び出される回数が多いなど処理速度が優先される場合は一般的な計算方法を選択したほうがいいです。

一般的に西暦が次の条件に合うとき、うるう年と判定されます。

うるう年の条件

4で割り切れる

ただし、例外として次の条件があります。

例外条件

100で割り切れて400で割り切れない年はうるう年ではない。

この条件を素直に関数化すると次のようになります。

うるう年判定関数


const isLeapYear = year => {
        if( year % 4 === 0 ) {
            if( year % 100 === 0 ){
                if( year % 400 !== 0 ) return false;
            }
            return true;
        }
        return false;
    }

if文を排除すると次のようになります。

うるう年判定関数


const isLeapYear = year => year % 400 === 0 
        ? true : ( year % 4 === 0 && year % 100 !== 0 );

そもそも400で割れればうるう年確定(4でも100でも割れる)なので最初にチェックし、その後4で割れて100で割れなければうるう年です。

コード的にはこちらの条件の方がシンプルですね。

更新日:2021/05/10

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。