2008年8月27日
PEAR::Date_Holidays_Japanを触ってみました
皆さんは祝日は好きですか? 私は大好きです!
その祝日ですが、祝日法が改正されて日付が固定でない日が増えたため、いざ祝日を求めようとするとなかなか大変です。
祝日を求めるPEARライブラリとしてDate_Holidaysがありますが、先日PHPプロ!Weekly PEAR リリース @ 08/08/26号を見ていたら、その日本用ドライバであるDate_Holidays_Japanがリリースされてました。
ちょっと調べてみたところ、あのDo You PHP?のshimookaさまが作ってるんですね。これはぜひ使ってみるしかということで触ってみました。
まずはインストールです。まだ正式リリースではありませんので「-alpha」を付けます。
# pear install Date_Holidays_Japan-alpha
とりあえず、今年の祝日一覧を表示するスクリプトを作成してみます。
holidays.php
<?php
require_once 'Date/Holidays.php';
// インストール先のパスを指定
$filename = '/usr/share/pear/data/Date_Holidays_Japan/lang/Japan/ja_JP.xml';
$dh = &Date_Holidays::factory('Japan', 2008, 'ja_JP');
$dh->addTranslationFile($filename, 'ja_JP');
$holidays = array();
foreach ($dh->getHolidays() as $h) {
$holidays[$h->getDate()->format('%Y-%m-%d')] = $h->getTitle();
}
ksort($holidays);
print_r($holidays);
?>
では、実行します。
$ php holidays.php
Array
(
[2008-01-01] => 元日
[2008-01-14] => 成人の日
[2008-02-11] => 建国記念の日
[2008-03-20] => 春分の日
[2008-04-29] => 昭和の日
[2008-05-03] => 憲法記念日
[2008-05-04] => みどりの日
[2008-05-05] => こどもの日
[2008-05-06] => 振替休日
[2008-07-21] => 海の日
[2008-09-15] => 敬老の日
[2008-09-23] => 秋分の日
[2008-10-13] => 体育の日
[2008-11-03] => 文化の日
[2008-11-23] => 勤労感謝の日
[2008-11-24] => 振替休日
[2008-12-23] => 天皇誕生日
)
今年の祝日が無事表示されました。振替休日などもきちんと対応してますね。素晴らしい!
ちなみに、2000年を指定するとこんな感じです。
Array
(
[2000-01-01] => 元日
[2000-01-10] => 成人の日
[2000-02-11] => 建国記念の日
[2000-03-20] => 春分の日
[2000-04-29] => 昭和の日
[2000-05-03] => 憲法記念日
[2000-05-04] => みどりの日
[2000-05-05] => こどもの日
[2000-07-20] => 海の日
[2000-09-15] => 敬老の日
[2000-09-23] => 秋分の日
[2000-10-09] => 体育の日
[2000-11-03] => 文化の日
[2000-11-23] => 勤労感謝の日
[2000-12-23] => 天皇誕生日
)
よく見てみると、祝日の名称が今のままですね。2000年の頃は、4月29日は「みどりの日」で、5月4日は「国民の休日」のはず……。
試しに、先ほどのスクリプトへ次の処理を追加して実行してみます。
<?php
_p($dh, 1949);
_p($dh, 1989);
_p($dh, 2007);
function _p($dh, $year)
{
$dh->setYear($year);