PHPで13日の金曜日を列挙

(1/1)
2016 年(平成 28 年)5 月 13 日は、13 日の金曜日かつ仏滅であった。このような日が今後 10 年以内に何度起きるのか、PHP を使って一覧表示プログラムをつくる。

(2021 年 5 月 12 日)PHP8 対応,リファラ・チェック追加

サンプル・プログラムの実行例

PHPで13日の金曜日を列挙

目次

サンプル・プログラム

圧縮ファイルの内容
getCursedDays.phpサンプル・プログラム本体。
pahooCalendar.php暦計算クラス pahooCalendar。
暦計算クラスの使い方は「PHPで日出没・月出没・月齢・潮を計算」を参照。include_path が通ったディレクトリに配置すること。

サンプル・プログラムの解説

0183: // メイン・プログラム =======================================================
0184: $year = isset($_GET['year']) ? $_GET['year'] : date('Y');
0185: $msg = '';
0186: 
0187: //pahooCalendarクラス
0188: $pcl = new pahooCalendar();
0189: $pcl->setLanguage('jp');
0190: 
0191: if ($year >= 1948 && $year <= 2099) {
0192:     $msg = "<table>\n";
0193:     $day = 13;
0194:     $cnt = 1;
0195:     for ($yyyy = $year$yyyy < $year + 10; $yyyy++) {
0196:         $pcl->makeLunarCalendar($yyyy);
0197:         $msg .= sprintf("<tr><td class=\"index\" colspan=\"3\">%04d年</td></tr>\n", $yyyy);
0198:         for ($month = 1; $month <= 12; $month++) {
0199:             $ww = $pcl->getWeekNumber($yyyy$month$day);
0200:             if ($ww == 5) {
0201:                 $youbi = $pcl->getWeekString($yyyy$month$day);
0202:                 list($month_lunar$day_lunar$flag) = $pcl->Gregorian2Lunar($yyyy$month$day);
0203:                 //2033年以降は六曜計算しない
0204:                 $rokuyou = $pcl->error ? '' : $pcl->rokuyou($month_lunar$day_lunar);
0205:                 $msg .= sprintf("<tr><td>%02d</td><td>%02d月%02d日(%s)</td><td>%s</td></tr>\n", $cnt$month$day$youbi$rokuyou);
0206:                 $cnt++;
0207:             }
0208:         }
0209:     }
0210:     $msg .= "</table>\n";
0211: else if ($year == FALSE) {
0212: else {
0213:     $msg = 'error > 指定できる西暦年は、1948年から2099年までです.';
0214: }
0215: 
0216: $HtmlBody = makeCommonBody($year$msg);
0217: 
0218: // 表示処理
0219: echo $HtmlHeader;
0220: echo $HtmlBody;
0221: echo $HtmlFooter;
0222: 
0223: $pcl = NULL;
0224: 
0225: /*

曜日や六曜の計算は、ユーザークラス "pahooCalendar" に分離している。
まず、クラスファイル "pahooCalendar.php" を  require_once  し、オブジェクトを生成する。

ここでは、最初に入力した西暦年 $year から 10 年間、毎月を for 文で回し、各月 13 日の曜日番号が 5、つまり金曜日であれば六曜 (ろくよう) を計算し表示する。

六曜は旧暦から求めるが、詳細については「PHP で 3 ヶ月カレンダーを作る」を参照されたい。
なお、西暦 2033 年(令和 15 年)に旧暦(天保暦)が決められないという「2033 年問題」があるため、2033 年(令和 15 年)以降の六曜計算はスキップするようにした。

参考サイト

(この項おわり)
header