• ベストアンサー

週や年データを取得するには

PHPで週単位のスケジュール表を作っています。 次の(1)または(2)を簡単にできる方法があれば、教えてください。 1)「11月の3週目の水曜日」や「51週(1年を通しての週)の月曜日」を取得する (JavaでいうところのCalendar.WEEK_OF_MONTH や DAY_OF_WEEK_IN_MONTH, WEEK_OF_YEAR ) 2)表示されている週(週先頭の年月日は判明している)から、前週・次週を持ってくる

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

どっかにあるかもしれませんが、$Y年$m月の$n週目の$week曜日のような関数を作ってみました。 ソース見れば分かると思いますが、date("w")で曜日番号を取得出来ます。これをもとに作っていけばいいと思います。 function get_ymweek($Y,$m,$n,$week){  //$Y年$m月第$n週の$week曜日(曜日番号または"Sun"のような形式)の日付を取得  if(! ereg("^[0-9]{4}$",$Y)) return "年指定エラー";  if(! ereg("^[0-9]{1,2}$",$m)) return "月指定エラー";  if(! ereg("^[1-5]$",$n)) return "第n週指定エラー";  if(! ereg("^[0-9]$",$week)){   $arr = array("Sun"=>0,"Mon"=>1,"Tue"=>2,"Wed"=>3,"Thu"=>4,"Fri"=>5,"Sat"=>6);   $week = $arr[$week];  }  $d1 = mktime(0,0,0,$m,1,$Y);//$Y年$m月1日  $w1 = date("w",$d1);//$d1の曜日番号  if($w1 > $week) $n ++;  $d = ($n-1)*7 + $week - $w1 + 1;  return $d; } また、51週(1年を通しての週)の月曜日の様な場合も基本的には一緒です。PHP 4.1.0以降でしたら、date("W")で一年を通しての月曜日に始まる年単位の週番号も取得出来るので、逆算する場合にはこれが使えます。 なお、ソースを見やすくするため、全角スペースを利用しています。コピペする場合は注意して下さい。

ton_jiru
質問者

お礼

ありがとうございます。 ご提供頂いたソースで無事解決できました!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

「11月の3週目の水曜日」というのがあいまいです。 週目というのは日曜基準か月曜基準かによって結果がことなります。 また基準日による前月への前倒しをしていいのかにもよります。 たとえば11月1週の月曜日という命題に対して 11/1が火曜日だったら1週の月曜は10/30になります。 これを拡大解釈して11/7としなくてはいけないならそれなりの 調整が必要になるでしょう。 基準日についても日曜基準なら11/1が日曜であれば、 第1週の月曜日は11/2ですが、月曜基準なら、10/25となるでしょう。 そのあたりの定義がはっきりすれば、比較的簡単にもとめられると 思います。 ちなみに2)は週先頭の年月日がわかっているなら86400*7をたせば 翌週、86400*7を引けば前週ですね。

ton_jiru
質問者

お礼

ありがとうございます。