PHPプログラミング

最終更新日:
公開日:

レシピ

日付・時刻

生年月日から現在の年齢を計算する

「2000-4-1」などの生年月日から、現在の満年齢を計算する方法について解説します。

この記事のポイント

  • 「満年齢」を計算する
  • 「数え年」による年齢を求めたい場合は異なる計算が必要

満年齢を計算する

生年月日を指定し、そこから現在の年齢を取得します。
例として、「2000年4月1日」を生年月日とします。

Note

「満年齢」とは、生まれた年月日を基点に数える方法です。通常、私たちが年齢を聞かれたときに答えるのは「満年齢」である場合がほとんどです。
この他に「数え年」で年齢を数える方法もあります。

コード例

// 生年月日からタイムスタンプを取得
$birthday = strtotime("2000-4-1");

$birth_year = (int)date("Y",$birthday);
$birth_month = (int)date("m",$birthday);
$birth_day = (int)date("d",$birthday);

// 現在の年月日を取得
$now_year = (int)date("Y");
$now_month = (int)date("m");
$now_day = (int)date("d");

// 年齢を計算
$age = $now_year - $birth_year;

// 「月」「日」で年齢を調整
if( $birth_month === $now_month ) {

	if( $now_day < $birth_day ) {
		$age--;
	}

} elseif( $now_month < $birth_month ) {
	$age--;
}

echo "満{$age}歳";

出力結果

満18歳

コードの内容をざっくり分けると、次の手順で処理を進めています。

  1. 生年月日からタイムスタンプを取得
  2. 生年月日からint型で「年」「月」「日」をそれぞれ取得
  3. 現時刻からint型で「年」「月」「日」をそれぞれ取得
  4. まずはシンプルに「年」だけ引いて年齢を計算
  5. 「月」「日」から年齢を調整
  6. 計算結果を出力

上から順に解説していきます。

生年月日からタイムスタンプを取得

まずは年齢を取得したい生年月日を指定し、strtotime関数でタイムスタンプを取得します。

$birthday = strtotime("2000-4-1");

生年月日からint型で「年」「月」「日」をそれぞれ取得

先ほど取得したタイムスタンプから、date関数を使って「年」「月」「日」をそれぞれ取得します。
このとき、後で計算しやすいようにint型への変換も行います。

$birth_year = (int)date("Y",$birthday);
$birth_month = (int)date("m",$birthday);
$birth_day = (int)date("d",$birthday);

現時刻からint型で「年」「月」「日」をそれぞれ取得

続いて、現在の年月日を「年」「月」「日」に分けて取得します。
こちらも後で計算するときのためにint型へ変換します。

$now_year = (int)date("Y");
$now_month = (int)date("m");
$now_day = (int)date("d");

まずはシンプルに「年」だけ引いて年齢を計算

まずは生年月日に関わらず、単純に現在の「年」から、生年月日の「年」を引いてざっくりとした年齢を取得します。

$age = $now_year - $birth_year;

「月」と「日」を比較して年齢を調整

続いて、「月」と「日」をそれぞれ確認して正確な年齢に調整を行います。

if( $birth_month === $now_month ) {

	if( $now_day < $birth_day ) {
		$age--;
	}

} elseif( $now_month < $birth_month ) {
	$age--;
}

ここでは2つの条件式がポイントです。
1つ目の条件式「$birth_month === $now_month」で、現時刻の「月」と、生年月日の「月」が等しいかの確認です。

等しい場合はif文の中で現時刻の「日」と、生年月日の「日」を比較し、今年の誕生日をすでに経過しているかを判断します。
経過していない場合は、先ほど取得した年齢が1歳多くなっているため、1歳引いて調整します。

現時刻の「月」と、生年月日の「月」が等しくない場合は、2つ目の条件式「$now_month < $birth_month」で、現時刻の「月」が生年月日の「月」より小さいかを確認しています。
小さい場合は、一律で誕生日が経過していないと判断できるため、先ほど求めた年齢から1歳引いて調整します。

反対に、現時刻の「月」が生年月日の「月」より大きい場合は、すでに誕生日が経過したと判断できるため年齢の調整は行いません。

計算結果を出力

最後に、ここまで計算した内容をecho関数で出力して終了です。

echo "満{$age}歳";

以上が生年月日から満年齢を取得する流れでした。