• ベストアンサー

PHPでn日後を計算したい

今日から7日後は◯月◯日◯曜日という計算をしたいのですが、 土日祝日を除く方法で詰まっています。 <?=date("Y-m-d",strtotime("+7 day"));?> 仕上がり日は◯日、といった表示をしたいので、 土日祝日を除く営業日をカウントしたいのです。 難しいでしょうか?? 汗 宜しくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.3

date()関数使えば簡単では? $weekday = array( "日", "月", "火", "水", "木", "金", "土" ); $date = new DateTime(date('Y-m-d')); $date->modify('+7day'); print $date->format('Y-m-d') .'は'.$weekday[$date->format('w')]."曜日"; 詳しくはこちらで http://php.net/manual/ja/ref.datetime.php

tkmkok
質問者

お礼

ありがとうございました。 +7dayするだけなので、シンプルで分かりやすいソースですね。 参考にさせていただきます!

その他の回答 (3)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.4

こういうロジックは人それぞれで楽しいですね。 自分ならこうするかな。 ============================================ //設定: n日後と 休日(曜日,日付)を配列に $n = 7; $offdays = array('Sat','Sun'); $holidays = array('2011-01-01','2011-02-11'); //n日後が休日から外れるまで +1日秒してゆく $n = strtotime("+$n day"); while(1){ if( in_array( date("D",$n), $offdays) || in_array( date("Y-m-d",$n),$holidays)){ $n += (60 * 60 * 24); }else{ break; } } //$n(timestamp)を取得済みなので 後はお好きにお料理 echo "仕上がりは、".date("n月j日",$n); ============================================= ※実務的には、営業時間を過ぎていれば翌日として計算する等の処理も必要になるかと。

tkmkok
質問者

お礼

大変参考になりました。 ありがとうございました。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

--- <?php function getNextBusinessDay($date_start, $count) { $holiday = array( "2011-07-18" => "海の日"); $date = clone $date_start; print $date->format("Y-m-d")."の".$count."営業日後を調べます\n"; $oneday = new DateInterval("P1D"); while ($count > 0) { $date->add($oneday); $str = $date->format("Y-m-d"); $w = $date->format("w"); if ($w < 1 #日曜 || $w > 5 #土曜 || isset($holiday[$str])) { #祝日 print $date->format("Y-m-d(D)").$holiday[$str]."は営業日ではありません\n"; continue; } $count--; print $date->format("Y-m-d(D)")."は営業日なので、残り $count 日\n"; } return $date; } $date = new DateTime("2011-07-14"); $step = 7; $next = getNextBusinessDay($date, $step); print $date->format("Y-m-d")."の".$step."営業日後は".$next->format("Y-m-d")."で す"; ?> --- こんな感じでしょうか。

tkmkok
質問者

お礼

whileループで土日祝日をcontinueでスキップする感じでしょうか。 是非試してみたいと思います。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.1

こんな感じで。 $n=0; for($i=1;$n<7;$i++){  if($i日後の曜日は月から金 && $i日後が祝日一覧表にない) $n++; } $n日後が求める日付; 「祝日一覧を自分でarrayとして日付を設定するのか、どこかから取ってくるのか?」と言う問題を除いては簡単です。

tkmkok
質問者

お礼

ありがとうございました。 なるほどnでカウントするんですね。 祝日判定は何とかなりそうです。 後は月をまたぐ計算ですかね・・・

関連するQ&A

専門家に質問してみよう