PHPで祝日を求める

(1/4)
今回は、PHP を使って計算によって祝日を求めるプログラムを作ってみることにする。
space
あらかじめ断っておくが、計算によって祝日を求めることは難しい
秋分の日と敬老の日の微妙な関係」で述べたように、法律によって祝日が変わるなどのルールがあるため、ある年の祝日を計算で完全に求めることはできない。
過去の祝日であれば、実際のカレンダーから祝日を抜き出してテーブルに用意しておき、それを引いた方が確実である。また、未来の祝日についても、アプリケーションやインターネットにあるものをテーブルとして取り込み、それを引いた方が手っ取り早く確実である。
space
ここでは、アプリケーションやインターネットにないような未来の祝日を求めることを目的に、あえて計算で導出することを考えてみることにする。

サンプル・プログラム

プログラムを実行する

ダウンロード(PHP4/5共用)

祝日法を整理する

日本の祝日は、「国民の祝日に関する法律」(祝日法)という法律によって定められている。祝日法は、1948 年(昭和 23 年)に定められた。そこで今回のプログラムは、1948 年以降の祝日について計算できるようにすることを目指す。
space
2009 年 6 月現在の祝日を一覧にすると下記の通りである。
「開始年」は祝日が有効になった年を、「終了年」は祝日が有効な最後の年を示す。
space
日本の祝日一覧
No.
月日
名称
開始年
終了年
備考
日本語
英語
固定祝日
1
1 月 1 日
元日 New Year Day
1949
-
 
2
1 月 15 日
成人の日 Coming of Age Day
1949
1999
(※1)
3
2 月 11 日
建国記念の日 National Foundation Day
1967
-
 
4
4 月 29 日
天皇誕生日 The Emperor's Birthday
1949
1989
(※2)
5
4 月 29 日
みどりの日 Greenery Day
1990
2006
(※2)
6
4 月 29 日
昭和の日 Showa Day
2007
-
(※2)
7
5 月 3 日
憲法記念日 Constitution Memorial Day
1949
-
 
8
5 月 4 日
国民の休日 Holiday for a Nation
1988
2006
(※3)
9
5 月 4 日
みどりの日 Greenery Day
2007
-
(※3)
10
5 月 5 日
こどもの日 Children's Day
1949
-
 
11
7 月 20 日
海の日 Marine Day
1996
-
 
12
9 月 15 日
敬老の日 Respect for the Aged Day
1966
2002
(※1)
13
10 月 10 日
体育の日 Health and Sports Day
1966
1999
(※1)
14
11 月 3 日
文化の日 National Culture Day
1948
-
 
15
11 月 23 日
勤労感謝の日 Labbor Thanksgiving Day
1948
-
 
16
12 月 23 日
天皇誕生日 The Emperor's Birthday
1989
-
 
17
4 月 10 日
皇太子明仁親王の結婚の儀 The Rite of Wedding of HIH Crown Prince Akihito
1959
1959
(※4)
18
2 月 24 日
昭和天皇の大喪の礼 The Funeral Ceremony of Emperor Showa.
1989
1989
(※4)
19
11 月 12 日
即位礼正殿の儀 The Ceremony of the Enthronement of His Majesty the Emperor (at the Seiden)
1990
1990
(※4)
20
6 月 9 日
皇太子徳仁親王の結婚の儀 The Rite of Wedding of HIH Crown Prince Naruhito
1993
1993
(※4)
移動祝日1
21
3 月 21 日頃
春分の日 Vernal Equinox Day
1949
-
 
22
9 月 23 日頃
秋分の日 Autumnal Equinox Day
1948
-
 
移動祝日2(いわゆるハッピーマンデー)
23
1 月
第2 月曜日
成人の日 Coming of Age Day
2000
-
 
24
7 月
第3 月曜日
海の日 Marine Day
2003
-
 
25
9 月
第3 月曜日
敬老の日 Respect for the Aged Day
2003
-
 
26
10 月
第2 月曜日
体育の日 Health and Sports Day
2000
-
 
振替休日(holiday in lieu)
27

祝日が日曜にあたるときは、その翌日を休日とする。1973 年 4 月 12 日から適用。
【改正】祝日が日曜にあたるときは、その日後において、その日に最も近い「国民の祝日」でない日を休日。2007 年 1 月 1 日から適用。

 
国民の休日(Citizen's Holiday)
28
その前日及び翌日が「国民の祝日」である日(日曜日にあたる日及び前項に規定する休日にあたる日を除く。)は、休日とする。1985 年 12 月 27 日から適用。
【改正】その前日及び翌日が「国民の祝日」である日(「国民の祝日」で ない日に限る)は、休日とする。 2005 年 5 月 20 日から適用。
 

(※1)2000 年または 2002 年に「移動祝日2」となる。
(※2)1990 年より「みどりの日」、2007 年より「昭和の日」となる。
(※3)2007 年より「みどりの日」となる。
(※4)1 年だけの祝日


space
祝日の性質に応じて、「固定祝日」「移動祝日1」「移動祝日2」「振替休日」「国民の休日」の 5 つにグルーピングしている。この名称はプログラムを作る便宜上付けたものであるので、他所では通用しない。
以下、それぞれのグループの計算方法を解説する。
この項つづく
header