michihide's blog

技術メモおよび雑感

PHP5.3以降ならこんな感じ?

hotta@sandbox:~$ cat to_wareki.php
<?php
//  西暦から和暦への変換
//
function to_wareki(Datetime $western) {
    $date = (int)$western->format('Ymd');

    if ($date >= 19890108) { //平成元年(1989年1月8日以降)
        $gengo = "h";
        $delta = new DateInterval('P1988Y');
    } else if ($date >= 19261225) { //昭和元年(1926年12月25日以降)
        $gengo = "s";
        $delta = new DateInterval('P1925Y');
    } else if ($date >= 19120730) { //大正元年(1912年7月30日以降)
        $gengo = "t";
        $delta = new DateInterval('P1911Y');
    } else if ($date >= 18680125) { //明治元年(1868年1月25日以降)
        $gengo = "m";
        $delta = new DateInterval('P1867Y');
    }
    $japanese = $western->sub($delta);
    return $gengo . '.' . $japanese->format('y/m/d');
}

$test = new DateTime('1868/09/01');
printf("西暦=%s, 和暦=%s\n", $test->format('Y/m/d'), to_wareki($test));
hotta@sandbox:~$ php to_wareki.php
西暦=1868/09/01, 和暦=m.01/09/01