PHP で和暦変換をするライブラリを作った
openpear がしばらくはてな ID でログインできなかったけど、昨日復活したと中の人が言ってたので復活記念としてリリースw
PHP で和暦変換する必要があったので、ライブラリが無いかと思って探したけど無かった。
時間がなくて結局ベタに実装したけど、あったら便利なのかなぁと思って和暦変換をする Date_Japanese_Era を作った。
http://openpear.org/package/Date_Japanese_Era
Perl の Date::Japanese::Era をポーティングした感じ*1。
<?php $era = new Date_Japanese_Era(array(2009, 7, 11)); echo $era->name; // 平成 echo $era->gengou; // name のエイリアス echo $era->year; // 21 echo $era->nameAscii; // heisei $era = new Date_Japanese_Era(array('平成', 21)); echo $era->gregorianYear; // 2009
元号のテーブルは Perl の Date::Japanese::Era::Table と同じく Date_Japanese_Era_Table に static なフィールドとして持ってる。
新しく元号が増えたらこのテーブルを更新すれば良い。
デフォルトの年号以外を使いたい場合は、 Date_Japanese_Era_Table::$ERA_TABLE; を上書きすれば良い。
<?php $data = array( '慶応' => array('keiou', 1865, 4, 7, 1868, 9, 7) ); Date_Japanese_Era_Table::$ERA_TABLE = $data; $era = new Date_Japanese_Era(array(1865, 4, 7)); echo $era->name; // 慶応
内部的には明治元年 (1868/9/8)とか明治 6 年 (1873/1/1)*2はタイムスタンプに変換したら false になったので、しょうがないので文字列比較してる。
こういう比較で判定できるのはキモイw
なので、1868/9/8 も変換できる。
なお存在しない日付 / 年号を入れたら例外が発生する。
<?php try { $era = new Date_Japanese_Era(array('昭和', 65)); } catch (Date_Japanese_Era_Exception $e) { // 例外 }
PHP で和暦変換するというニーズはあまりないと思うけど需要がある場合は是非ご利用下さい。