プロが教える店舗&オフィスのセキュリティ対策術

早速ですが、やりたいことを書きます。

まず、入力フォームに
○年○月○週~△年△月△週
と、数字を入力し
○年○月○週~△年△月△週の各週の最初と最後を取得したいです。

1週間は月曜から日曜としています。

例えば
2011年5月2週~2011年6月3週を入力したときに

2011-05-09~2011-05-15
2011-05-16~2011-05-22
2011-05-23~2011-05-29
2011-05-30~2011-06-05
2011-06-06~2011-06-12
2011-06-13~2011-06-19

と区切り配列に格納したいです。

$week_array = array(
array(
"week_start" => "2011-05-09",
"week_end" => "2011-05-15",
),
array(
"week_start" => "2011-05-16",
"week_end" => "2011-05-22",
)
);
こういう感じに入れたいです。

アドバイスをよろしくお願いします。

A 回答 (3件)

ごめんなさいバグがあるかもしれませんが、こんなんでどうでしょ?



<?PHP
function get_week($y,$m,$w){
$date =mktime(0,0,0,$m,$w*7,$y);
$date -=(date("w",$date)-1)*60*60*24;
if(date("w",mktime(0,0,0,$m,1,$y))==1) $date -=7*60*60*24;
return $date;
}

$from_y=2011;
$from_m=5;
$from_w=2;
$to_y=2011;
$to_m=6;
$to_w=3;

$from=get_week($from_y,$from_m,$from_w);
$to=get_week($to_y,$to_m,$to_w -1); // 1週引いてます
for($i=$from ;$i<=$to;$i +=7*60*60*24){
$week_array[] = array(
"week_start" => date("Y/m/d",$i)
,"week_end" => date("Y/m/d",$i+6*60*60*24)
);
}
print "<pre>";
print_r($week_array);
print "</pre>";
?>
    • good
    • 0
この回答へのお礼

ありがとうございます!

動作もバッチリでした!

お礼日時:2011/07/28 10:42

ある月の第1週の定義が不定なので回答に迷います。


自分なりに考えて2つあると思いますが、例示を見る限り定義が混在しているようです。

第1週の定義(A)ある月の第1週の定義は、ある月の月曜日で始まる週を第1週とする。
第1週の定義(B)ある月の第1週の定義は、ある月の1日が含まれる週を第1週とする。

例示された例では、5月2週が5月9日ですので、(A)の定義となりますが、それに対して6月3週は6月13日ですので(B)の定義になります。

2011-05-02~2011-05-08 A:5月1週 B:5月2週
2011-05-09~2011-05-15 A:5月2週
2011-05-16~2011-05-22 A:5月3週
2011-05-23~2011-05-29 A:5月4週
2011-05-30~2011-06-05 A:5月5週 B:6月1週
2011-06-06~2011-06-12 A:5月6週 A:6月1週 B:6月2週
2011-06-13~2011-06-19 A:5月7週 A:6月2週 B:6月3週
2011-06-20~2011-06-26 A:5月8週 A:6月3週 B:6月4週

例示の誤りか、第1週の定義の誤りだと思いますが、正しい例示に直されるようにおすすめします。

この回答への補足

なるほど・・・。

やりたいことは(A)の定義だと思います・・・。

(B)の定義になっているのは
例えば5月の2週だけ9日から15日の日付けを取得する場合の入力は
2011年5月2週(9日)~2011年5月2週(15日)
になりますよね・・・。

これじゃおかしいかな?と思い
△年△月△週のところは、入力した週の前の週までという感じがいいのかなと思いました。
6月3週の最後は26日(日)ですが、その前の週の19日(日)を取得みたいな・・・。
ここの説明重要でしたね・・・。すいません・・・。

△年△月△週の入力の部分についても何かアドバイスがあればよろしくお願いします!

補足日時:2011/07/27 16:07
    • good
    • 0

かりに2011-05-09が5月2週だとすると、5月1週は5/2からとなり


5/1日は4月の最終週に組み込まれますがよろしいですか?
もうすこし突っ込んで考えると、年次の切り替えタイミングが
2011/1/3が1月の1週で1/1~2は前年になり
2012/1/1が2011年の最終週になります。
そういう仕様で大丈夫ですか?

この回答への補足

はい。その仕様で良いです。

よろしくお願いいたします。

補足日時:2011/07/27 14:40
    • good
    • 0

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