[PHP-users 8289] Re: 予約システムにおける、予約制限について

Youichi Iwakiri php-users@php.gr.jp
Tue, 25 Jun 2002 20:33:34 +0900


いわきりです

#今更ながらPHPの日付関連関数の使いやすさに感謝

six_o_six wrote in <20020625194749.4D35.SIX_O_SIX@mac.com> :
>なんとかstrtotime関数で実現できそうです。
>ネックになっていたのが週2日というしばりだったのですが、
>曜日をはじきだし、それを基準として、
>月曜日ならその日から4日後まで、
>火曜日なら前日と3日後まで
>水曜日なら前2日までと2日後まで・・
>というのをなんとかスマートに計算する方法はないかと悩み
>こちらにご相談させていただきました。
>
>日付/時刻の関数を再度調べなおして
>strtotime関数の存在を初めて知り、
>その強力さにおどろいています。

下記のファンクションを使って手抜きしています。
自分では、カレンダー関係の計算は殆どしなくて済んでいます。
日付にマイナスの値が入ってもちゃんとした日付にしてくれるので
mktimeは非常に便利ですね。

<script language="php">
//
// Syntax:
//   array $this_week = get_week(int $this_year, int $this_month, int $this_day)
// Return Value
//   $this_week[0] = "2002-06-23"  <- 週の始(日曜日)
//   $this_week[0] = "2002-06-29"  <- 週の終(土曜日)
//
function get_week($yy, $mm, $dd) {
    $now_date        = mktime(0, 0, 0, $mm, $dd, $yy);
    $day_of_week = 0;
    $day_of_year = 0;
    sscanf(strftime("%w %j", $now_date), "%d %3d", &$day_of_week, &$day_of_year);
    $this_week[0] = strftime("%Y-%m-%d", mktime(0, 0, 0, 1, $day_of_year - $day_of_week, $yy));
    $this_week[1] = strftime("%Y-%m-%d", mktime(0, 0, 0, 1, $day_of_year + (6 - $day_of_week), $yy));
    return $this_week; 
}

$this_week = array();
$this_week = get_week(2002, 6, 25);
print_r($this_week);
</script>

後は、週の開始を何曜日からにするかとか、SQLの条件の作成だけの問題ですね。

-- 
Youichi Iwakiri