匿名質問者

PHPで土日祝日を除いて、今日から中4営業日の自動表示をしたいと考えています。

まだ途中ですがいろいろ調べていいところまでいったのですが・・・曜日を日本語で表示させることができません。

どなたかお知恵を拝借いただけませんでしょうか。
以下、コードです。
祝日はしょっちゅう変わるので年に1度手打ちで入れていくつもりです。
Googleカレンダーから取得する方法も見つけましたが、訳あって外部データは引っ張れません。

<?php
function getNextBusinessDay($date_start, $count)
{
$holiday = array( "2011-07-18" => "海の日");

$date = clone $date_start;
$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])) { #祝日
continue;
}
$count--;
}
return $date;
}
$today = date("Y/m/d");
$date = new DateTime($today);
$step = 5;
$next = getNextBusinessDay($date, $step);


print "".$next->format("Y-m-d(l)")."";
?>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/29 21:15:04

回答2件)

匿名回答1号 No.1

何がわからないのか、判らない。
こういう方法で表示できない理由でもあるの?
http://memememomo.hatenablog.com/entry/2011/12/06/200644

匿名回答2号 No.2

土日を除く中4日って、間に祝日が無ければ必ず7日後(=1週間後)ですよね?
なのでインターバルの計算は不要じゃないかなぁ...

注目している7日間に祝日があれば、その日数分更に付加すればよいと思います。
西暦の日付を YYYYMMDD の書式で表示した値であれば単純に比較できるでしょうから「間にある」のチェックも容易ですよね?

曜日を示す値(日曜が0、土曜が6)から4を引いた値よりも間にある祝日の数が少なければ再度土日を超える事はないのでそのまま(7+祝日の数)、そうでなければ更に2日(土日の分)を付加すればトータル何日後が判明する。
(期間が長くなった分祝日が増えないかの再チェックが必要でしょう)


日本語の曜日は、曜日を示す値(上記)をキーにした配列を作っておけばお手軽です。
$jday = array('日','月',...,'土');
$wday = date('w', time());
print '今日は'.$jday[$wday].'曜日';

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません