[php][pear]Date_Holidays_Driver_Japaneseを使ってみた

カテゴリ: php / author: uechoco / 2008年05月11日 02:45:05
この記事を読む時間:59くらい

前から気になっていたので、使ってみました。Date_Holidays_Driver_Japanese

PEAR::Date_Holidays_Driver_Japanese 0.2.0 - Do You PHP はてな

特徴としては、

  • 振替休日 OK
  • 国民の休日 OK
  • 春分・秋分の日 OK(天文学的な計算が必要)
  • ハッピーマンデー OK
  • 古い休日 OK(2006年04月29日="みどりの日")

とまぁ、至れり尽くせりで感動です。

そんなわけで、使ってみました。とても汚いソースコードですね。

php:
  1. <?php
  2.  
  3. /**
  4.  * Date_Holidays_Driver_Japanseを用いて
  5.  * 祝日名を取得する
  6.  *
  7.  * 2008/05/11
  8.  *
  9.  * Author:   uechoco
  10.  * 動作確認: PHP 5.2.5
  11.  * require:  Date_Holidays (推奨バージョン:0.18.0)
  12.  * require:  Date_Holidays_Driver_Japanese 0.2.0
  13.  *
  14.  */
  15.  
  16. // Date_Holidaysクラスの読み込み
  17. require_once "Date/Holidays.php";
  18.  
  19. // 言語ファイルの読み込み(PEARのdataディレクトリ内)
  20. define('LANG_FILE', 'C:/php5/pear/data/Date_Holidays_Driver_Japanese/lang');
  21.  
  22. // 祝日かどうかを判断する
  23. $pattern = array(
  24.     '2008' => array(
  25.         '2008-01-01', // 元旦
  26.         '2008-01-14', // 成人の日
  27.         '2008-02-11', // 建国記念の日
  28.         '2008-03-20', // 春分の日
  29.         '2008-04-29', // 昭和の日
  30.         '2008-05-03', // 憲法記念日
  31.         '2008-05-04', // みどりの日
  32.         '2008-05-05', // こどもの日
  33.         '2008-05-06', // (振替休日)
  34.         '2008-07-21', // 春分の日
  35.         '2008-09-15', // 敬老の日
  36.         '2008-09-23', // 秋分の日
  37.         '2008-10-13', // 体育の日
  38.         '2008-11-03', // 文化の日
  39.         '2008-11-23', // 勤労感謝の日
  40.         '2008-11-24', // (振替休日)
  41.         '2008-12-23', // 天皇誕生日
  42.     ),
  43.     '2009' => array(
  44.         '2009-01-01', // 元日
  45.         '2009-01-12', // 成人の日
  46.         '2009-02-11', // 建国記念の日
  47.         '2009-03-20', // 春分の日
  48.         '2009-04-29', // 昭和の日
  49.         '2009-05-03', // 憲法記念日
  50.         '2009-05-04', // みどりの日
  51.         '2009-05-05', // こどもの日
  52.         '2009-05-06', // (振替休日)
  53.         '2009-07-20', // 春分の日
  54.         '2009-09-21', // 敬老の日
  55.         '2009-09-22', // (国民の祝日)
  56.         '2009-09-23', // 秋分の日
  57.         '2009-10-12', // 体育の日
  58.         '2009-11-03', // 文化の日
  59.         '2009-11-23', // 勤労感謝の日
  60.         '2009-12-23', // 天皇誕生日
  61.     ), 
  62. );
  63. foreach ($pattern as $year => $yearPattern) {
  64.     // Date_Holidaysオブジェクトの生成(西暦を省略すると現在の西暦になる)
  65.     $obj =& Date_Holidays::factory('Japanese', $year);
  66.     if (Date_Holidays::isError($obj)) {
  67.         die('Factory was unable to produce driver-object');
  68.     }
  69.    
  70.     // 翻訳ファイルをロケール=ja_JPとして登録
  71.     $obj->addTranslationFile(LANG_FILE . '/Japanese/ja_JP.xml', 'ja_JP');
  72.     if (Date_Holidays::isError($obj)) {
  73.         die($obj->getMessage());
  74.     }
  75.  
  76.     foreach ($yearPattern as $d) {
  77.         $holiday = $obj->getHolidayForDate($d, 'ja_JP');
  78.         printHolidayInfo($holiday, $d);
  79.     }
  80.     echo "<hr />\n\n";
  81. }
  82.  
  83.  
  84. function printHolidayInfo($holiday, $date = '')
  85. {
  86.     echo $date . " =========<br />\n";
  87.     if (is_null($holiday)) {
  88.         echo "祝日ではありません!!!<br />\n";
  89.     } else {
  90.         printf("名前:%s<br />\n", $holiday->getTitle());
  91.         //printf("内部名:%s<br />\n", $holiday->getInternalName());
  92.         //printf("プロパティ:%s<br />\n", print_r($holiday->getProperties(), true));
  93.         //printf("Dateクラス:%s<br />\n", print_r($holiday->getDate(), true));
  94.     }
  95. }
  96. ?>

出力結果

CODE:
  1. 2008-01-01 =========
  2. 名前:元日
  3. 2008-01-14 =========
  4. 名前:成人の日
  5. 2008-02-11 =========
  6. 名前:建国記念の日
  7. 2008-03-20 =========
  8. 名前:春分の日
  9. 2008-04-29 =========
  10. 名前:昭和の日
  11. 2008-05-03 =========
  12. 名前:憲法記念日
  13. 2008-05-04 =========
  14. 名前:みどりの日
  15. 2008-05-05 =========
  16. 名前:こどもの日
  17. 2008-05-06 =========
  18. 名前:振替休日
  19. 2008-07-21 =========
  20. 名前:海の日
  21. 2008-09-15 =========
  22. 名前:敬老の日
  23. 2008-09-23 =========
  24. 名前:秋分の日
  25. 2008-10-13 =========
  26. 名前:体育の日
  27. 2008-11-03 =========
  28. 名前:文化の日
  29. 2008-11-23 =========
  30. 名前:勤労感謝の日
  31. 2008-11-24 =========
  32. 名前:振替休日
  33. 2008-12-23 =========
  34. 名前:天皇誕生日
  35. 2009-01-01 =========
  36. 名前:元日
  37. 2009-01-12 =========
  38. 名前:成人の日
  39. 2009-02-11 =========
  40. 名前:建国記念の日
  41. 2009-03-20 =========
  42. 名前:春分の日
  43. 2009-04-29 =========
  44. 名前:昭和の日
  45. 2009-05-03 =========
  46. 名前:憲法記念日
  47. 2009-05-04 =========
  48. 名前:みどりの日
  49. 2009-05-05 =========
  50. 名前:こどもの日
  51. 2009-05-06 =========
  52. 名前:振替休日
  53. 2009-07-20 =========
  54. 名前:海の日
  55. 2009-09-21 =========
  56. 名前:敬老の日
  57. 2009-09-22 =========
  58. 名前:国民の休日
  59. 2009-09-23 =========
  60. 名前:秋分の日
  61. 2009-10-12 =========
  62. 名前:体育の日
  63. 2009-11-03 =========
  64. 名前:文化の日
  65. 2009-11-23 =========
  66. 名前:勤労感謝の日
  67. 2009-12-23 =========
  68. 名前:天皇誕生日

foreachの中でDate_Holidaysクラスのオブジェクトを生成しているのが気持ち悪いのですが、ちょっと分けアリでして。。。その辺は近いうちに別の記事に書きます。

これで祝日処理が楽になりそうだ。


コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.