2018年1月28日 : してログ

汎用的に使える和暦フォーマット関数を作成してみました。元号は漢字表記とアルファベットに対応し、通常の日付フォーマットを利用することが可能です。また、明治以降に対応し、平成の次の新元号が決まったら書き換えれば済む(改元の2019年5月1日は組み込んであります)ようになっています。

  • 「平成」などの漢字表記と「H」などのアルファベット表記ができます
  • 最初の年を「元年」と表記します
  • 年以外の部分に日付フォーマットの書式が使えます
  • 新元号にすぐに対応できるようにしました
  • 明治以降の元号に対応しています
  • 明治より前は「西暦1192」や「AD 1192」のような表記になります

使い方

// 平成30年1月28日
convert_jpdt(time());

// 平成30年01月28日
convert_jpdt(time(),'年m月d日');

// H30.01.28
convert_jpdt(time(),'.m.d',false);

ソースコード

// 西暦→和暦変換
function convert_jpdt($dt,$fmt='年n月j日',$kanji=true) {
	$date = (int)date('Ymd',$dt);
	$year = (int)date('Y',$dt);

	if ($date >= 20190501) {        //新元号元年(2019年5月1日以降)
		$name = "  ?未定";
		$year -= 2018;
	} else if ($date >= 19890108) { //平成元年(1989年1月8日以降)
		$name = "  H平成";
		$year -= 1988;
	} else if ($date >= 19261225) { //昭和元年(1926年12月25日以降)
		$name = "  S昭和";
		$year -= 1925;
	} else if ($date >= 19120730) { //大正元年(1912年7月30日以降)
		$name = "  T大正";
		$year -= 1911;
	} else if ($date >= 18680125) { //明治元年(1868年1月25日以降)
		$name = "  M明治";
		$year -= 1867;
	} else {
		$name = 'AD 西暦';
	}

	if ($kanji) {
		$name = substr($name,3);
		if ($year==1) $year = '元';
	} else {
		$name = ltrim(substr($name,0,3));
	}

	return $name.$year.date($fmt,$dt);
}