PHPで土日祝日及び営業時間を考慮した上で翌○営業日を計算する方法
2021/04/26
PHPで翌○営業日を計算したい。例えば本日が2021/04/15で翌5営業日を計算した場合、4/22を出力したい。また、例えば通販サイト等で「14時までに購入いただいた方は本日発送」みたいな案内がある。この営業時間の概念も入れたい。以下に対応方法をメモ。
やりたいこと
翌○営業日を計算したい。土日祝は+1日とする。また、14時を過ぎている場合はさらに+1日とする。
休日をどうするか
PHPで土日はdate関数を使用することで取得できるが、祝日は取得できない。また、祝日は「○月の第一月曜日」等、年度によって日付が変わる。さらには法改正で「○月の第一月曜日」自体も変わるかもしれない。
その為、以前にGASで作成した祝日APIか、他所様のAPIを使用する。今回は他所様のAPIで対応した。
ソース
<?php //○営業日指定 $limit_day = 5; //営業時間指定 $limit_hour = 14; //固定休業日。この場合は土日 $week_end = array('Sat','Sun'); //祝日APIにリクエスト $public_holiday_api = file_get_contents('https://holidays-jp.github.io/api/v1/date.json'); $tmp_public_holiday = json_decode($public_holiday_api, true); //年月日のみ配列に格納 foreach( $tmp_public_holiday as $key => $val ){ $public_holiday['data'][] = $key; } //現在日付から1日単位で休日かを判定する $business_day = date('Y-m-d'); $tmp_business_day = date('Y-m-d'); $limit_hour_flg = true; $count = 1; while( $count <= $limit_day ){ $tmp = strtotime($tmp_business_day . ' +' . $count . 'day'); //土日祝日の場合 if( in_array(date('D', $tmp), $week_end) || in_array(date('Y-m-d', $tmp), $public_holiday['data']) ){ $count++; $limit_day++; //営業時間を過ぎている場合 }else if( $limit_hour <= date('H') && $limit_hour_flg ){ $count++; $limit_day++; $limit_hour_flg = false; }else{ $count++; } $business_day = date('Y-m-d', strtotime($business_day . ' +1 day')); } var_dump(date('m月d日', strtotime($business_day)));
注意点
本ソースコードは祝日APIを毎回リクエストするような形だが、それだと相手側に迷惑がかかる。その為、実際に運用する際はAPIリクエスト後にデータベースやJSONファイルにデータを格納する形が望ましいかと思われる。
参考サイト
関連記事
-
PHPで画像を上下反転させ保存する
やりたかった事は、下記の通り。 ・既にフォルダに保存されている画像を上下反転させ ...
-
mp3ファイルのアップロードと再生方法
mp3ファイルをformでアップロードしたかったのと、Webサイト上で再生したか ...
-
PHPで改行を含むデータをCSV化する際に表示崩れを防ぐ方法
PHPで改行を含むデータをCSV化した場合、そのCSVファイルをエクセル等で開く ...
-
PHPでファイルアップロード時にディレクトリトラバーサル攻撃の対策をする方法
あるシステムのセキュリティ対策としてディレクトリトラバーサル(Directory ...
-
PHPとajaxでチャットの作成
■ソース ・index.php <? error_reporting(E_ ...