アプリ版:「スタンプのみでお礼する」機能のリリースについて

今日から7日後は◯月◯日◯曜日という計算をしたいのですが、
土日祝日を除く方法で詰まっています。

<?=date("Y-m-d",strtotime("+7 day"));?>

仕上がり日は◯日、といった表示をしたいので、
土日祝日を除く営業日をカウントしたいのです。

難しいでしょうか?? 汗
宜しくお願い申し上げます。

A 回答 (4件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/06/15 16:14

こういうロジックは人それぞれで楽しいですね。


自分ならこうするかな。
============================================
//設定: 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);
=============================================

※実務的には、営業時間を過ぎていれば翌日として計算する等の処理も必要になるかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/14 23:01

---


<?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")."で
す";

?>
---
こんな感じでしょうか。
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/06/15 16:16

こんな感じで。



$n=0;
for($i=1;$n<7;$i++){
 if($i日後の曜日は月から金 && $i日後が祝日一覧表にない) $n++;
}
$n日後が求める日付;

「祝日一覧を自分でarrayとして日付を設定するのか、どこかから取ってくるのか?」と言う問題を除いては簡単です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
なるほどnでカウントするんですね。

祝日判定は何とかなりそうです。
後は月をまたぐ計算ですかね・・・

お礼日時:2011/06/14 04:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!