kinalog

自称フロントエンドエンジニアが何か喚いています。

PHPでのうるう年判定

日付を扱うときにぶつかるのがうるう年。
PHPではいくつか判定のしかたがあるみたいなのでそれのメモ。

1. 自力で判定式を書いてみる方式

まずうるう年の定義。

wikipediaによると

  • 西暦年が4で割り切れる年は閏年
  • ただし、西暦年が100で割り切れる年は平年
  • ただし、西暦年が400で割り切れる年は閏年

とのこと。

これを考慮して関数を考えてみます。 

function isLeapYear ( $year ) {
    if( ( $year % 4 == 0 && $year % 100 != 0 ) || $year % 400 == 0 ) {
		return true;
	} else {
		return false;
	}
}

このまま他の言語でも使えそう。

 

2. DateTimeクラスを使う方式

PHP5 閏年(うるう年)か調べる DateTime::format('L') checkdate
http://atamoco.boy.jp/php5/datetime/isleap.php

を参考に。

function isLeapYear ( $year ) {
    $date = new DateTime( $year . '-1-1' );
	$leap = $date -> format( 'L' );

	if( $leap ) {
		return true;
	} else {
		return false;
	}
}

JavaScriptのDateクラスに近い感じ?うるう年判定以外にもやることがあるのならこれかな。

 

3. checkdate関数を使う方式

その年の2月29日は存在しているかどうかを判定。 

function isLeapYear ( $year ) {
    if( checkdate( 2, 29, $year ) ) {
		return true;
	} else {
		return false;
	}
}

単純にうるう年かどうかを調べるだけならこれが一番スマートな気がします。