• 締切済み

date関数で、曜日を日本語表示でループさせる。

いつもお世話になります。 さて、date関数で、曜日を日本語表示でループさせ、日曜日だけ外す方法で悩んでおります。 今日から、順番に日付を表示させるのは、下記でできたのですが、 <?PHP $nday = mktime(); for($i=0;$i<5;$i++){ print "<option>".date("m月d日 (D)", mktime(0,0,0,date("m"),date("d")+$i,date("y")))."<br />"; } ?> 例) 04月18日 (Wed) 04月19日 (Thu) 04月20日 (Fri) 04月21日 (Sat) 04月22日 (Sun) 日本語表示にさせようとすると、曜日がループしません。 <?PHP $nday = mktime(); $youbi = array("日","月","火","水","木","金","土"); for($i=0;$i<5;$i++){ print "<option>".date("m月d日 (".$youbi[date(w)].")", mktime(0,0,0,date("m"),date("d")+$i,date("y")))."<br />"; } ?> 例) 04月18日 (水) 04月19日 (水) 04月20日 (水) 04月21日 (水) 04月22日 (水) また、ここから日曜日だけ外すことはできますか? お手数ですが、ご教示ください。 よろしくお願いいたします。

みんなの回答

回答No.3

//ループの中でいちいちdate("Y")というような意味のない繰り返しがあるので、これらは先に変数に格納します。 $Y = date("Y"); $m = date("m"); $d = date("d"); //曜日を先に配列にいれておくのは正解です。 $youbi = array("日","月","火","水","木","金","土"); //最終的にoptionに入れるようですが、基本的には<option>値</option>というかたちでタグを閉じるのが良いです。 //どちらかといえば、<option value="値">表示</option>という形が良いと思います。 for($i=0;$i<30;$i++){  $time = mktime(0,0,0,$m,$d+$i,$Y);  $w = date("w",$time);//曜日取得  if($w > 0){ //日曜日は0   $datestr = date("Y年m月d日",$time)."(".$youbi[$w].")";   print("<option>{$datestr}</option>");  } } こんな感じでしょうか 上記スクリプトは > $youbi[date(w)] ここでdate関数内のwが文字列になっていない事が問題じゃないでしょうか。

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まぁ、$youbi[date(w)]としてますので、date(w)では今日の曜日しか ひろえないですね。こんな感じでしょうか。 <?PHP $youbi = array("日","月","火","水","木","金","土"); for($i=0;$i<5;$i++){ $d=mktime(0,0,0,date("m"),date("d")+$i,date("y")); print date("m月d日",$d)." (".$youbi[date("w",$d)].")<br />"; } ?> ちなみにoptionとbrの組み合わせは変だったのでとりあえずbr にしときました >日曜日だけ外すことはできますか? ちょっと状況がわかりかねますが、曜日が0を除外すればよいのでは? if(date("w",$d)!=0) print date("m月d日",$d)." (".$youbi[date("w",$d)].")<br />";

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

ちょっとしたサンプルです。 <?php $nday = mktime(); $youbi = array("日", "月", "火", "水", "木", "金", "土"); for ($i = 0; $i < 15; $i++) {   $w = (date("w") + $i) % 7;   if ($w != 0) {     print date("m月d日 (" . $youbi[$w] . ")",       mktime(0, 0, 0, date("m"), date("d")+$i, date("y"))) . "<br />";   } } ?> (注)インデントのため、全角空白を使っています。

すると、全ての回答が全文表示されます。

関連するQ&A