PHPプログラミング

最終更新日:
公開日:

レシピ

日付・時刻

西暦から和暦の元号(明治・大正・昭和・平成・令和)を取得する

西暦から「平成12年」「令和元年」などの和暦を取得する方法について解説します。

この記事のポイント

  • 明治以降の和暦を対象に取得する
  • 和暦の境目「1月9日」をしっかり判定する

和暦を取得する

プログラミングの時刻関係ではタイムスタンプがよく使用されますが、タイムスタンプの仕様上1970年より遡ることができません。
そのため、1969年以前の日付から昭和、大正、明治の元号を取得することは難しいという制約があります。
そこで、「年」「月」「日」を整数(int型)にし、和暦の境目となる日付までを考慮して実装する方法が便利です。

和暦の境目は次のようになりす。

元号開始終了
明治明治元年(1868年1月25日)明治45年(1912年7月29日)
大正元年(1912年7月30日)15年(1926年12月24日)
昭和元年(1926年12月25日)64年(1989年1月7日)
平成元年(1989年1月8日)31年(2019年4月30日)
令和元年(2019年5月1日)

元号の開始と終了の年月日を使って、西暦から現在の元号を判定するコードを書いていきます。

PHP コード例

// 変数の初期化
$res = null;

// 和暦に変換したい日付
$year = "1969";
$month = "12";
$day = "31";

// 日付を整数型で作成
$date = (int)($year.sprintf('%02d',$month).sprintf('%02d',$day));

if( 18680125 <= $date && $date <= 19120729 ) {

  // 明治
  $meiji = ($year - 1868)+1;
  
  if( $meiji === 1 ) {
    $res = "明治元年";
  } else {
    $res = "明治{$meiji}年";
  }

} elseif( 19120730 <= $date && $date <= 19261224 ) {

  // 大正
  $taisho = ($year - 1912)+1;

  if( $taisho === 1 ) {
    $res = "大正元年";
  } else {
    $res = "大正{$taisho}年";
  }

} elseif( 19261225 <= $date && $date <= 19890107 ) {
  
  // 昭和
  $showa = ($year - 1926)+1;

  if( $showa === 1 ) {
    $res = "昭和元年";
  } else {
    $res = "昭和{$showa}年";
  }

} elseif( 19890108 <= $date && $date <= 20190430 ) {

  // 平成
  $heisei = ($year - 1989)+1;

  if( $heisei === 1 ) {
    $res = "平成元年";
  } else {
    $res = "平成{$heisei}年";
  }

}  elseif( 20190501 <= $date ) {

  // 令和
  $reiwa = ($year - 2019)+1;

  if( $reiwa === 1 ) {
    $res = "令和元年";
  } else {
    $res = "令和{$reiwa}年";
  }
}

echo $res;

出力結果

昭和44年

上記コードでは「// 和暦に変換したい日付」で年月日を指定すると和暦を取得することができます。

PHP コード例

// 和暦に変換したい日付
$year = "1969";
$month = "12";
$day = "31";

ここで指定した年月日を、次のコードで整数の値に変換します。

PHP コード例

$date = (int)($year.$month.$day);

あとは$dateに入っている「19691231」などの値から、if文の条件式で明治、大正、昭和、平成のいずれかに該当するかをチェックするという流れです。

「月」「日」は和暦の境目を判定するために使用します。
例えば、昭和64年は1989年1月7日までで、同年1月8日からは平成元年です。
「1989年」など西暦の「年」だけではこの境目を判断できません。

また、上記コードでは元号の最初の年を「1年」ではなく「元年」となるようにしています。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。