こんにちは!
前回「『閏年判定アプリ』を作った」にて
new Date()
を使用した判定方法をコメントで教えていただきました。
時間が関係する処理を書くとき、何かと閏年の判定は必要になると思うのでメモとしてここに残します。
詳しくは 前回記事 のコメント欄をご参照ください。
まず一般的な方法として
const isLeapYear = year => year%4 === 0 && year%100 !== 0 || year%400 === 0;
という方法があります。
年数が 4で割り切れて かつ 100で割り切れない または 400で割り切れる
閏年の定義をそのまま当てはめて、判定する方法です。
それとは異なりnew Date()
を使用した方法は以下のようになります。
const isLeapYear = year => new Date(year, 1, 29).getDate() === 29;
new Date()
に変数yearと2月の29番目を指定し、それが存在する場合29を返すのでtrueになるという方法です。
確認してみましょう。
閏年の場合
const 閏年です= new Date(1996, 1, 29).getDate();
console.log(閏年です);
閏年でない場合
const 閏年ではありません= new Date(1995, 1, 29).getDate();
console.log(閏年ではありません);
出力結果
29と厳密等価演算子で結ばれるのは閏年の場合だけというのがわかりました。
ちなみに`new Date()`を使用した方法には別の書き方もあります。
以下の記事を参照にしました。
JavaScriptで「うるう年」の判定はnew Date(y, 2, 0)を使用する
const isLeapYear = year => new Date(year, 2, 0).getDate() === 29;
どちらも2月の29日を確認しています。3月0番目を設定して2月29日を確認する方法もあるんですね。
ちなみにこちらの場合、閏年の時は29を返しますが、閏年でない場合は28を返します。
const 閏年ではありません= new Date(1995, 2, 0).getDate();
console.log(閏年ではありません);