PR

PHPで閏年を判定するサンプルプログラム

スポンサーリンク

プログラムで日付などを扱う場合は多いですが、そこでやっかいなのが、たまにやってくる閏年です。平年なら2月29日は存在しませんが、閏年には2月29日が出現するので、それを考慮しなくてはいけません。

この閏年は西暦から判定することが可能ですが、PHPではどのように判定すればよいのかサンプルプログラムで見ていきたいと思います。

スポンサーリンク

そもそも閏年とは?

閏年とは、太陽暦における時間の調整のために設けられた特別な年のことを指します。一年は地球が太陽の周りを一周する時間、つまり365.2422日を基に定義されます。しかし、この小数点以下の時間を無視すると、年々誤差が積み重なり、季節とカレンダーがずれてしまいます。

そこで、太陽暦であるグレゴリオ暦では、4年に1回、つまり年数が4で割り切れる年を閏年とし、その年には1年を366日として1日を追加します。この追加される1日は2月29日とされます。

閏年を簡単に説明すると、次の3つのポイントがあります。

  1. だいたい4年に1回うるう年がくる。
  2. うるう年には2月が29日まである(平年は2月28日まで)。
  3. うるう年は季節と暦のズレを調整する意味がある。

近年ですと閏年は次の年となります。

  • 2004年
  • 2008年
  • 2012年
  • 2016年
  • 2020年
  • 2024年
  • 2028年
  • 2032年

閏年かどうかの判定方法は?

閏年かどうか判定する方法は、ウィキペディアによると次のようになります。

  • 西暦年が4で割り切れる年は(原則として)閏年。
  • ただし、西暦年が100で割り切れる年は(原則として)平年。
  • ただし、西暦年が400で割り切れる年は必ず閏年。

判定文を使用して、これをプログラムにすることは可能ですが、やや複雑なので本当に作ったプログラムが正確なのか不安な方もいることでしょう。

筆者も自分の作ったプログラムが絶対に間違いないという自身はないので、ここではPHPの標準ライブラリを使用した閏年の判定方法について紹介したいと思います

DateTime クラスを使用した閏年の判定方法

PHPで日付を扱うための「DateTime クラス」には閏年を判定する機能が付属しております。では、閏年を判定するサンプルプログラムについて見ていきたいと思います。

function is_leap($year) {
    $date = new DateTime("{$year}-01-01");
    return $date->format('L');
}

$year = 2024;
if (is_leap($year)) {
  echo "{$year}年は閏年です。";
} else {
  echo "{$year}年は閏年ではありません。";
}

実行結果:

2024年は閏年です。

プログラム解説

閏年を判定する関数 is_leap を用意しました。引数に西暦を指定して、それが閏年なら「true」、閏年でないなら「false」を返却します。ではこの関数について解説します。

$date = new DateTime(“{$year}-01-01”);

DateTime クラスを使用して日付を生成して変数$dateに格納しております。生成されるのは変数「$year」の西暦の1月1日です。サンプルプログラムでは変数「$year」には引数で「2024」を渡しているので、生成される日付は「2024-01-01」となります。

ちなみに「$date = new DateTime()」のようにDateTime 関数の引数を指定しない場合は、現在の日時が生成されます

return $date->format(‘L’);

DateTime クラスのオブジェクト「$date」のformat メソッドを呼び出しておりますが、引数に「L」を指定すると閏年の判定ができます。

オブジェクト「$date」が閏年の場合は「1」が返却され、そうでない場合は「0」が返却されます。このサンプルプログラムの場合、「2024-01-01」は閏年なので「1」が返却されます。

DateTime クラスのformat メソッドには閏年の判定の他にいろいろな機能があります。例えば引数で「D」を指定すると、その日付の曜日が返却されます。

checkdate 関数を使用した閏年の判定方法

PHPではcheckdate 関数を使用して閏年を判定することもできます。サンプルプログラムは次のようになります。

function is_leap($year) {
    return checkdate(2, 29, $year);
}

$year = 2024;
if (is_leap($year)) {
  echo "{$year}年は閏年です。";
} else {
  echo "{$year}年は閏年ではありません。";
}

実行結果:

2024年は閏年です。

プログラム解説

それでは、このサンプルプログラムについて解説していきます。

return checkdate(2, 29, $year);

is_leap 関数の中のこの部分で閏年の判定を行っております。メインプログラムで関数を呼ぶ際に引数「$year」には「2024」を指定しております。

bool checkdate(月, 日, 年)

checkdate 関数は引数で指定された日付の妥当性をチェックすることができます。指定して日付が妥当の場合は「true」、そうでない場合は「false」が返却されます。このサンプルプログラムの場合、2024年は閏年であり、「2024-02-29」は存在する妥当性のある日付なので「true」が返却されます。

まとめ

PHPで閏年を判定する方法をサンプルプログラムを紹介して解説してきましたが、いかがでしたでしょうか。

PHPの標準ライブラリには閏年かどうかを判定する機能が用意されていますので、簡単にそして正確に判定を行うことができます。

php
スポンサーリンク
シェアする
-をフォローする
プログラミングのメモ

コメント