PHPで西暦を和暦(令和、平成、昭和、大正、明治)に変換
西暦表示になっている日付データを和暦表示(例:2019/05/01を令和元年5月1日)に変換します
和暦表示で新元号の「令和」を対応することになったので対応したソースをアップします。
今後、新たに追加になった場合は配列に新しい元号と開始日・開始年を追加するこで対応することができます。
使い方
echo chgAdToJpDate('2019/05/01'); // 結果 // 令和元年5月1日 echo chgAdToJpDate('2019-4-30'); // 結果 // 平成31年4月30日
和暦変換
/** * 和暦変換(グレゴリオ暦が採用された「明治6年1月1日」以降に対応) * 引数:西暦(9999/99/99 or 9999-99-99) * 戻値:和暦 */ function chgAdToJpDate($value) { //和暦変換用データ $arr = array( array('date' => '2019-05-01', 'year' => '2019', 'name' => '令和'),// 新元号追加 array('date' => '1989-01-08', 'year' => '1989', 'name' => '平成'), array('date' => '1926-12-25', 'year' => '1926', 'name' => '昭和'), array('date' => '1912-07-30', 'year' => '1912', 'name' => '大正'), array('date' => '1873-01-01', 'year' => '1868', 'name' => '明治'),// 明治6年1月1日以降 ); // 日付チェック if (chkDate($value) === false) { return ''; } $arrad = explode('-', str_replace('/', '-', $value)); $addate = (int)sprintf('%d%02d%02d', (int)$arrad[0], (int)$arrad[1], (int)$arrad[2]); $result = ''; foreach ($arr as $key=>$row) { // 日付チェック if (chkDate($row['date']) === false) { return ''; } $arrjp = explode('-', str_replace('/', '-', $row['date'])); $jpdate = (int)sprintf('%d%02d%02d', (int)$arrjp[0], (int)$arrjp[1], (int)$arrjp[2]); // 元号の開始日と比較 if ($addate >= $jpdate) { // 和暦年の計算 $year = sprintf('%d', ((int)$arrad[0] - (int)$row['year']) + 1); if ((int)$year === 1) { $year = '元'; } // 和暦年月日作成 $result = sprintf('%s%s年%d月%d日', $row['name'], $year, (int)$arrad[1], (int)$arrad[2]); break; } } return $result; }
日付チェック
/** * 日付チェック * 引数:西暦(9999/99/99 or 9999-99-99) * 戻値:結果 */ function chkDate($value) { if ((strpos($value, '/') !== false) && (strpos($value, '-') !== false)) { return false; } $value = str_replace('/', '-', $value); $pattern = '#^([0-9]{1,4})-(0[1-9]|1[0-2]|[1-9])-([0-2][0-9]|3[0-1]|[1-9])$#'; preg_match($pattern, $value, $arrmatch); if ((isset($arrmatch[1]) === false) || (isset($arrmatch[2]) === false) || (isset($arrmatch[3]) === false)) { return false; } if (checkdate((int)$arrmatch[2], (int)$arrmatch[3], (int)$arrmatch[1]) === false) { return false; } return true; }
※グレゴリオ暦(新暦)が日本で正式に使用されるようになった明治6年1月1日から対応しています。
■令和
2019/05/01(令和元年5月1日) ~
■平成
1989/01/08(平成元年1月8日) ~ 2019/04/30(平成31年4月30日)
■昭和
1926/12/25(昭和元年12月25日) ~ 1989/01/07(昭和64年1月7日)
■大正
1912/07/30(大正元年7月30日) ~ 1926/12/24(大正15年12月24日)
■明治
1873/01/01(明治6年1月1日) ~ 1912/07/29(明治45年7月29日)
※太陰太陽暦(旧暦)は未対応
1868/01/25(明治元年1月1日) ~ 1872/12/31(明治5年12月2日)