PEAR::Date_Holidays_Driver_Japanese 0.2.2
華麗に突っ込まれてました><
正確に言うと、Date_Holidays_Driver_Japanese::setYear()の挙動が変。
:
setYear()を使うと振替休日と国民の休日だけ表示されないので、Date_Holidays_Driver_Japaneseがおかしいのかな?って思ったりもしたんですが、内部名が初期化されていないのはDate_Holidays_Driverもおかしい気がしないでもないのですが、今眠くて深追いする気が起きません(ぉぃ。
:
解決策としては、西暦が変わったら、オブジェクトを新規に生成しなおすのが早そうです。
Date_Holidays_Driverクラスは内部で事ある毎にsetYearメソッドをコールして、内部で保持している祝日情報の再構築を頻繁にやっています。今回の件ですが、setYearメソッドで祝日の再構築をした際、当該年に存在する祝日以外の翻訳データを削除していたことが直接の原因です(Date_Holidays_Driverクラス内)。ただ、getHolidayForDateメソッドでロケールを指定しない場合はちゃんと値が返ってきます。
<?php $lastYear = 0; $beginTime = mktime(0, 0, 0, 1, 1, 2008); for ($i = 0; $i <731; $i++) { : $holiday = $obj->getHolidayForDate($d); // ロケールを指定しない : }
つーか、そもそも内部で
- 日付
- 祝日名称
- 内部名称
を別々の配列で格納してるのってどうかと思ってはいるんですが。。。;-)
ということで、バージョン0.2.2をリリースします。更新内容は以下の通りです。
- 翻訳データを登録した、かつ、setYear()した場合に、getHolidayForDate()が正しい値を返さない不具合を修正(thanks id:uechoco)
- かなり強引ですが、毎回1から構築し直すようにしました
インストールは
$ sudo pear install -af http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz
アップグレードは
$ sudo pear upgrade -af http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz
な感じで。コード一式はCodeReposからどうぞ。