【ア主研開発日記】こだわりの元号表記...明治マイナス12年?

細々とアジア主義研究所(通称:ア主研)の開発を進めている。
今週のテーマは、カスタム投稿ページの作成だ。
例えば、人物紹介とスポット紹介では掲載する項目が異なる。前者では生年月日や出身地が必要だし、後者はGoogle Mapやアクセス情報があった方が親切だろう。いちいちレイアウトを出し分けるのは大変なので、それぞれテンプレートを作成して更新時の手間を減らそうとしている。

先週UPしたアジア主義年表もそうなのだが、当サイトのこだわりのひとつは「元号(和暦)併記」だ。
これは先日、高市早苗議員の本を読んだ際「令和7年(2025年)5月1日」のように、すべての日付が元号表記の西暦併記だったことに着想を得たものだ。
当サイトはアジア主義という多国籍かつ通史的なテーマゆえ西暦をベースとしてはいるのだが、日本の伝統を尊重する意味も込めて元号も併記することにした。

そう決意したのはいいのだが、WordPressにはもちろん元号表記のシステムはない...ということで、条件分岐でポチポチと元号と西暦を対応させていく。明治以降でいいかな...と思っていたのだが、頭山満先生の生誕日が明治-15年表記になってしまったので、慌てて安政年間までの元号を追加する。


安政以前の生まれのアジア主義者っていたかなあ...ひとまず現在までのコードを掲載しておく。
function format_date_with_japanese_era($date_string) {
if (!$date_string) return '';
// 2025/05/01 or 2025-05-01 どちらの形式でも対応できるようにする
$date_obj = DateTime::createFromFormat('Y/m/d', $date_string);
if (!$date_obj) {
$date_obj = DateTime::createFromFormat('Y-m-d', $date_string); // ←ハイフン形式も試す
}
if (!$date_obj) return esc_html($date_string); // 不正ならそのまま表示
$y = (int) $date_obj->format('Y');
$m = (int) $date_obj->format('n');
$d = (int) $date_obj->format('j');
$ymd = (int) $date_obj->format('Ymd');
$wareki = '';
// 安政以降をカバー
if ($ymd < 18680125) {
$wareki = ($y == 1854) ? '安政元年' : '安政' . ($y - 1853) . '年'; // 安政: 1854/11/27〜1860/3/18
} elseif ($ymd < 18680407) {
$wareki = ($y == 1860) ? '万延元年' : '万延' . ($y - 1859) . '年'; // 万延: 1860/3/18〜1861/2/19
} elseif ($ymd < 18680425) {
$wareki = ($y == 1861) ? '文久元年' : '文久' . ($y - 1860) . '年'; // 文久: 1861/2/19〜1864/2/20
} elseif ($ymd < 18680908) {
$wareki = ($y == 1864) ? '元治元年' : '元治' . ($y - 1863) . '年'; // 元治: 1864/2/20〜1865/4/7
} elseif ($ymd < 18680923) {
$wareki = ($y == 1865) ? '慶応元年' : '慶応' . ($y - 1864) . '年'; // 慶応: 1865/4/7〜1868/9/8
} elseif ($ymd < 19120730) {
$wareki = ($y == 1868) ? '明治元年' : '明治' . ($y - 1867) . '年';
} elseif ($ymd < 19261225) {
$wareki = ($y == 1912) ? '大正元年' : '大正' . ($y - 1911) . '年';
} elseif ($ymd < 19890108) {
$wareki = ($y == 1926) ? '昭和元年' : '昭和' . ($y - 1925) . '年';
} elseif ($ymd < 20190501) {
$wareki = ($y == 1989) ? '平成元年' : '平成' . ($y - 1988) . '年';
} else {
$wareki = ($y == 2019) ? '令和元年' : '令和' . ($y - 2018) . '年';
}
return esc_html($date_obj->format('Y年') . '(' . $wareki . ') ' . $m . '月' . $d . '日');
}