PHPで13日の金曜日を列挙

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

(2023年10月14日)pahooInputDataクラス,Spinner導入.

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

PHPで13日の金曜日を列挙

目次

サンプル・プログラム

圧縮ファイルの内容
getCursedDays.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
pahooCalendar.php暦計算クラス pahooCalendar。
暦計算クラスの使い方は「PHPで日出没・月出没・月齢・潮を計算」を参照。include_path が通ったディレクトリに配置すること。
getCursedDays.php 更新履歴
バージョン 更新日 内容
1.4.0 2023/10/14 pahooInputDataクラス,Spinner導入
1.3 2021/05/12 PHP8対応,リファラ・チェック追加
1.2 2019/12/20 旧暦の2033年問題につき,2033年以降の六曜計算を省く
1.1 2019/09/21 六曜計算の不具合を修正,リファラチェック追加
1.0 2016/05/15 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
1.5.0 2024/01/28 exitIfExceedVersion() 追加
1.4.2 2024/01/28 exitIfLessVersion() メッセージ修正
1.4.1 2023/09/30 コメントの訂正
1.4.0 2023/09/09 $_GET, $_POST参照をfilter_input()関数に置換
1.3.0 2023/07/11 roundFloat() 追加
pahooCalendar.php 更新履歴
バージョン 更新日 内容
4.3.2 2023/02/11 getSolarTerm72() 表記改訂:水澤腹堅→水沢腹堅
4.3.1 2023/02/03 表記改訂:バクムーン→バックムーン,スタージャンムーン→スタージョンムーン,七十二候
4.3.0 2023/01/14 コメント表記などを見直した,tenshanichi()追加
4.2.0 2023/01/11 getTimeDifference(),setTimeDifference()追加
4.1.0 2023/01/09 太陽,月の位置計算の基準をUTCに変更した

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

 252: // メイン・プログラム =======================================================
 253: //西暦年取得
 254: $msg = $errmsg = '';
 255: $year = getValidNumber('year', $errmsg, date('Y'), TRUE, YEAR_MIN, YEAR_MAX);
 256: if (isButton('reset')) {
 257:     $year = date('Y');
 258:     $errmsg = '';
 259: }
 260: 
 261: //pahooCalendarクラス
 262: $pcl = new pahooCalendar();
 263: $pcl->setLanguage('jp');
 264: 
 265: //13日の金曜日一覧を求める
 266: if ($errmsg == '') {
 267:     $msg = "<table>\n";
 268:     $day = 13;
 269:     $cnt = 1;
 270:     for ($yyyy = $year$yyyy < $year + 10$yyyy++) {
 271:         $pcl->makeLunarCalendar($yyyy);
 272:         $msg .sprintf("<tr><td class=\"index\" colspan=\"3\">%04d年</td></tr>\n", $yyyy);
 273:         for ($month = 1$month <12$month++) {
 274:             $ww = $pcl->getWeekNumber($yyyy, $month, $day);
 275:             if ($ww == 5) {
 276:                 $youbi = $pcl->getWeekString($yyyy, $month, $day);
 277:                 list($month_lunar, $day_lunar, $flag) = $pcl->Gregorian2Lunar($yyyy, $month, $day);
 278:                 //2033年以降は六曜計算しない
 279:                 $rokuyou = $pcl->error ? '' : $pcl->rokuyou($month_lunar, $day_lunar);
 280:                 $msg .sprintf("<tr><td>%02d</td><td>%02d月%02d日(%s)</td><td>%s</td></tr>\n", $cnt, $month, $day, $youbi, $rokuyou);
 281:                 $cnt++;
 282:             }
 283:         }
 284:     }
 285:     $msg ."</table>\n";
 286: else {
 287:     $msg = $errrmsg;
 288: }
 289: 
 290: //表示HTML作成
 291: $HtmlBody = makeCommonBody($year, $msg);
 292: 
 293: //画面表示
 294: echo $HtmlHeader;
 295: echo $HtmlBody;
 296: echo $HtmlFooter;
 297: 
 298: //インスタンス解放
 299: $pcl = NULL;
 300: 
 301: /*

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

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

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

参考サイト

(この項おわり)
header