- ベストアンサー
指定された範囲の各週を配列に入れる方法
- 指定された範囲の週を配列に入れる方法についてアドバイスをお願いします。
- 入力フォームに年月週の範囲を入力して、各週の最初と最後の日付を取得する方法について教えてください。
- 例えば、2011年5月2週から2011年6月3週までの各週の日付を配列に格納する方法を教えてください。
- みんなの回答 (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>"; ?>
その他の回答 (2)
- OrangeCup150
- ベストアンサー率62% (109/174)
ある月の第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日(日)を取得みたいな・・・。 ここの説明重要でしたね・・・。すいません・・・。 △年△月△週の入力の部分についても何かアドバイスがあればよろしくお願いします!
- yambejp
- ベストアンサー率51% (3827/7415)
かりに2011-05-09が5月2週だとすると、5月1週は5/2からとなり 5/1日は4月の最終週に組み込まれますがよろしいですか? もうすこし突っ込んで考えると、年次の切り替えタイミングが 2011/1/3が1月の1週で1/1~2は前年になり 2012/1/1が2011年の最終週になります。 そういう仕様で大丈夫ですか?
補足
はい。その仕様で良いです。 よろしくお願いいたします。
お礼
ありがとうございます! 動作もバッチリでした!