【PHP】西暦を和暦に変換する方法
こんにちは、岐阜・名古屋を拠点に全国各地からご依頼いただくWEBサイトを制作しているフリーランスエンジニアの寺井です。
日本には和暦というものが存在します。入力フォームに生年月日を入力してもらう場合、基本的に和暦・または西暦のどちらかを入力してもらいます。
西暦を入力してもらい、自動で和暦も弾き出す際、その日付をもとに元号を割り出す必要があります。
またWordPressの投稿記事など登録される日付は西暦で保存されるため、それをもとに変換する必要があります。
今回の記事ではPHPを使用し西暦をもとに和暦に変換する方法をご紹介したいと思います。
PHPで西暦から和暦に変換する方法
早速、西暦を和暦にするPHPのコードをご紹介します。以下は明治以降の元号をカバーしています。それ以前については適宜コードを追加する必要があります。
function change_jp_calendar($year, $month, $day) {
if ($year > 2019 || ($year == 2019 && $month >= 5)) {
$Jp = '令和';
$JpYear = $year - 2018;
} elseif ($year > 1989 || ($year == 1989 && $month >= 1)) {
$Jp = '平成';
$JpYear = $year - 1988;
} elseif ($year > 1926 || ($year == 1926 && $month >= 12)) {
$Jp = '昭和';
$JpYear = $year - 1925;
} elseif ($year > 1912 || ($year == 1912 && $month >= 7)) {
$Jp = '大正';
$JpYear = $year - 1911;
} elseif ($year > 1868 || ($year == 1868 && $month >= 1)) {
$Jp = '明治';
$JpYear = $year - 1867;
} else {
$Jp = 'その他';
$JpYear = $year;
}
return $Jp . ($JpYear == 1 ? '元' : $JpYear) . '年' . $month . '月' . $day . '日';
}
引数は3つ。年、月、日の順に指定することで、和暦に変換し、元号●年●月●日の形式で値を返します。
実際の使用例は以下の通りです。
echo change_jp_calendar(1910, 4, 1);
echo change_jp_calendar(2023, 11, 16);
実行結果は以下の通りです。
明治43年4月1日
令和5年11月16日
このように簡単に西暦を和暦に変換することが出来ます。
WordPressの投稿日時を和暦に変換する方法
続いて、具体的な使用例として、WordPressの投稿日を和暦に変換して表示させる方法をご紹介します。
WordPressの投稿記事の投稿日を和暦に変換する場合、先ほどの関数の他にもう一つ関数を作成します。
作成した2つの関数はWordPressの使用中のテーマ内のfunctions.phpに定義します。
function get_the_jp_date() {
$post_date = get_the_date('Y-m-d');
list($year, $month, $day) = explode('-', $post_date);
$year = (int)$year;
$month = (int)$month;
$day = (int)$day;
return change_jp_calendar($year, $month, $day);
}
この関数の中で先ほど作成したchange_jp_calendarを使用することで投稿日を和暦に変換して返します。
実際には以下のように使用します。
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
// 投稿のタイトルを表示
echo get_the_title();
// 和暦の投稿日を表示
echo get_the_jp_date();
// 投稿の内容を表示
echo get_the_content();
}
}
?>
これで投稿日を和暦で表示することが出来ます。
まとめ
今回の記事ではPHPで西暦をもとに和暦に変換する方法を解説しました。
システムや仕様によっては西暦を和暦に変換しないといけない時が出てくるかもしれません。
上のコードをコピペするだけで使用できるので良ければ使用してみてください。