• ベストアンサー

明日以降の平日表示

ちょっと頭がこんがらがってわからなくなってしまいました。 明日以降の平日の日付を取得・表示するスクリプトを考えております。 ========= <? $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+1,date("y")); if(date("w",$d)==6) $d=$d+60*60*24*2; if(date("w",$d)==0) $d=$d+60*60*24*2; $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday; ?> <? $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+2,date("y")); if(date("w",$d)==6) $d=$d+60*60*24*2; if(date("w",$d)==0) $d=$d+60*60*24*2; $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday; ?> <? $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+3,date("y")); if(date("w",$d)==6) $d=$d+60*60*24*2; if(date("w",$d)==0) $d=$d+60*60*24*2; $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday; ?> <? $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+4,date("y")); if(date("w",$d)==6) $d=$d+60*60*24*2; if(date("w",$d)==0) $d=$d+60*60*24*2; $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday; ?> この方法だとなぜか、 ============ 2007年08月27日 (月) 2007年08月28日 (火) 2007年08月27日 (月) 2007年08月28日 (火) ============ となります。 どこがおかしいのでしょうか?

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

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

>ページ内のほかの要素の都合でfor文を使わないで書きたいのですが >それは可能でしょうか? 意味がうまく理解できません。 前回のように関数化してしまえば、変数が絡むこともないし、とくに forによって問題になることは皆無だとおもいますが・・・。 とはいえ、参考までに以下のようにかいてみました。 冗長なソースになるのでお勧めはできません。 <?PHP $d=mktime(0,0,0,date("m"),date("d"),date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+1,date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+2,date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+3,date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+4,date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+5,date("Y")); after5daysNotFor($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+6,date("Y")); after5daysNotFor($d); function after5daysNotFor($d){ $youbi = array("日","月","火","水","木","金","土"); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")以降の平日5日間<br>"; $d+=60*60*24*((date("w",$d)==5)?3:(date("w",$d)==6?2:1)); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")<br>"; $d+=60*60*24*((date("w",$d)==5)?3:(date("w",$d)==6?2:1)); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")<br>"; $d+=60*60*24*((date("w",$d)==5)?3:(date("w",$d)==6?2:1)); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")<br>"; $d+=60*60*24*((date("w",$d)==5)?3:(date("w",$d)==6?2:1)); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")<br>"; $d+=60*60*24*((date("w",$d)==5)?3:(date("w",$d)==6?2:1)); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")<br>"; } ?>

wf3255
質問者

お礼

幾度もお付き合いいただき有難うございました。 組み込みが完成したページをお見せしたいぐらいですが 控えます。^^; 有難うございました。

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

その他の回答 (6)

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

あー・・・なんとなくわかってきました。 こんな感じでよいですか? <? $d=mktime(0,0,0,date("m"),date("d"),date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+1,date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+2,date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+3,date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+4,date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+5,date("Y")); after5days($d); print "<hr>"; $d=mktime(0,0,0,date("m"),date("d")+6,date("Y")); after5days($d); print "<hr>"; function after5days($d){ $youbi = array("日","月","火","水","木","金","土"); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")以降の平日5日間<br>"; for($i=0;$i<5;$i++){ $d+=60*60*24; if(date("w",$d)==6) $d+=60*60*24; if(date("w",$d)==0) $d+=60*60*24; $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday."<br>"; } } ?>

wf3255
質問者

補足

動きは希望通りです。有難うございます。 ページ内のほかの要素の都合でfor文を使わないで書きたいのですが それは可能でしょうか?

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

あれ? >2007年08月27日 (月) >2007年08月27日 (月) >2007年08月27日 (月) >2007年08月28日 (火) >になってしまいます。 こうなってはだめなんですか? 単純に土日を表示しないのであれば・・・ こんな感じ <? for($i=0;$i<20;$i++){ $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+$i,date("Y")); if(date("w",$d)!=6 AND date("w",$d)!=0){ $theday = date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; print $theday."<br>"; } } ?>

wf3255
質問者

補足

あ、えっと凄く近づいてきました。 でも土・日の場合は翌週の月・日が出力されるようにしたいです。 その後は後ずれしてゆく感じです。 5日後までの出力です。 ですので希望は、 ======= <本日処理した場合> 2007年08月27日 (月) 2007年08月28日 (火) 2007年08月29日 (水) 2007年08月30日 (金) 2007年08月31日 (土) ======= こんな感じです。

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

> 週をまたがった場合はなんか処理が必要な気がしてきました。 では、どういった結果がほしいのでしょうか? もともと投稿されたスクリプトや私のサンプルでは、 n日後が月~金だったらそのまま出力しているだけです。 他の加工が必要なのでしょうか?

wf3255
質問者

補足

はい。他の加工が必要です。 動きの希望としては n日後が土あるいは日だった場合は翌週の月あるいは火と出力され、その次に表示されるべきだった月と火は水と木と表示されてそのまま後連れしてゆく感じです。 ちなみに5日分です。 ですので本日動かした場合は ====== 2007年08月27日 (月) 2007年08月28日 (火) 2007年08月29日 (水) 2007年08月30日 (木) 2007年08月31日 (金) ====== と表示させたいのです。

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

よくみたら以前私がかいたやつですね・・・ 日曜日に2日足してますよね?1日足せば月曜ですよ http://oshiete1.goo.ne.jp/qa3136693.html

wf3255
質問者

補足

そうなんです。 その節は有難うございました。 それで動かしていたのですが、週をまたがった場合なぜか 月曜と火曜がダブルのです。 木・金・土にこのスクリプトが動くページを見ると 月曜と火曜が(あるいは片方)がダブルのです。 週を超えた場合に別処理が必要になることを今考えております

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

先ほどの回答をした者です。 もしも祝日のことを意識する必要がある場合は、 先ほどのサンプル・スクリプトを適当に修正してください。

wf3255
質問者

補足

参考意見有難うございます。 祝日は考慮していただかなくて大丈夫です。 申し遅れてすみません

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

サンプルです。 <?php $youbi = array("日", "月", "火", "水", "木", "金", "土"); $oneday = 60 * 60 * 24; for ($i = 1; $i <= 10; $i++) { $d = mktime(0, 0, 0, date("m"), date("d") + $i, date("y")); if (date("w", $d) == 6) $d += $oneday * 2; else if (date("w", $d) == 0) $d += $oneday; $theday = date("Y年m月d日", $d) . " (" . $youbi[date("w", $d)] . ")<br />"; print $theday; } ?>

wf3255
質問者

補足

参考意見有難うございます。 施工してみると === 2007年08月27日 (月) 2007年08月27日 (月) 2007年08月27日 (月) 2007年08月28日 (火) ・ ・ ・ === になってしまいます。 っということは、 週をまたがった場合はなんか処理が必要な気がしてきました。

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

関連するQ&A

  • 翌日の日付表示で土日を抜きたい

    質問させていただきます。 次回の会合部屋の予約可能日付を表示させるスクリプトを考えています。まず1日後の日付表示を考えているのですが、1日後が土曜日或いは日曜日の際には翌週の月曜日が表示されるようにしたいです。 現状は下記のとおり1日後の日付を表示する事しかできません。 <? $youbi = array("日","月","火","水","木","金","土"); $d=mktime(0,0,0,date("m"),date("d")+1,date("y")); print date("Y年m月d日",$d)." (".$youbi[date("w",$d)].")"; ?> 土曜日と日曜日は表示から省かれるようにする方法を教えてください。

    • ベストアンサー
    • PHP
  • 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日 (水) また、ここから日曜日だけ外すことはできますか? お手数ですが、ご教示ください。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 曜日を日本語表示にする方法は?

    こんにちは、いつもお世話になっています。 以前どこかのサイトから、記憶(memo)とっていて、現在もそれを使っていたのですが、 何故か、本日(土)だけ、文字化けすることに気がつきました。 +-----------ここから----------------------- $youbi = array('日','月','火','水','木','金','土'); $gmt = time()+9*3600; $now = gmdate("Y/m/d(".$youbi[gmdate("w",$gmt)].") H:i:s", $gmt); +------------------------------ここまで--------- コードは、このように書いています。 それで、帰ってくる値は、「2004/05/15(?4) 03:46:44」となります。 文字化けさせないで、曜日を日本語にするには、どうしたら良いのでしょうか? 教えて下さい。よろしく、おねがいします。

    • ベストアンサー
    • PHP
  • 縦カレンダーの曜日に色づけ

    <?php $lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy)); for ($i = 1; $i <= $lastd; $i++) ?> <tr> <?php  $ts = mktime(0, 0, 0, $mm, $i, $yyyy);  $ymd = date("Y/m/d", $ts);  $ymdstr = strftime("%Y年%m月%d日(%a)", $ts); ?> <td><?php echo $ymd ?></td> <?php //曜日表示  $_m =$m;  $dd = $i;  $aday = array("日", "月", "火", "水", "木", "金", "土"); while( $m==$_m ){ printf("<td><center>%s</center></td>", $aday[date("w", $ts)]); $d++; //次の日の月を$_mに代入 $_m = date("m",$ts); } ?> 日付の部分を"switch文"を使って書きたいのですが、わからずに苦労しています。教えてもらえると助かります。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 日付を表示するプログラム

    「2017/04/01 (土)」の形式で本日の日付を出力する場合は以下のコードで合っていますか? <?php //関数を作成し曜日をグループ化 function Week(){ return array('日', '月', '火', '水', '木', '金', '土'); } //曜日を取得して変数化 $w = Week()[date("w")]; //全て表示 echo date("Y/m/d($w)"); ?>

    • ベストアンサー
    • PHP
  • 土日をカウントしない日付表示

    PHPで日付の表示方法で困っています。 今日から3日後の日付を表示するときに土日を含まないで表示させたいのです。本日12日ですので17日が表示されるようなPHPをご教授いただきたいです。 <?php echo date("m月d日",strtotime("+3 day"));?> だと単純に3日後ですし、 <?PHP $day = 60 * 60 * 24; $t=mktime(0,0,0,date("m"),date("d")+3,date("y")); if(date("w",$t)==6) $t += $day * 2; if(date("w",$t)==0) $t += $day ; echo date("m月d日",$t); ?> だとしても土日をカウントしているので、思うような結果に至っておりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 改行されないカレンダー(PHP)

    ●質問の主旨 下記のコードでカレンダーを作りましたが、 日付が横一列に並んだ奇妙なカレンダーになってしまいます。 参考文献と比べて、同じコードを記述しているように思いますが、 なぜ改行されないのか、分かりません。 ご存知の方、アドバイスよろしくお願いします。 ●参考文献 西沢直木「プログラミングの教科書」P196 ●開発環境 windows8 xammp1.8.1 ●コード(test.4) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>カレンダー</title> </head> <table border="1"> <tr> <th>日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th>土</th> </tr> <tr> <?php $y =2012; $m = 2; $wd1 = date("w", mktime(0, 0, 0, $m, 1, $y)); for ($i = 1; $i <= $wd1; $i++) { echo "<td> </td>"; } $d = 1; while (checkdate($m, $d, $y)) { echo "<td>$d</td>"; if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) { //週を終了 echo"</tr>"; //次の週がある場合は新たな行を準備 if (checkdate($m, $d + 1, $y)) { echo"<tr>"; } } //日付を1つすすめる $d++; } // 最後の週の土曜日まで移動 $wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y)); for ($i = 1; $i < 7 - $wdx; $i++) { echo "<td> </td>"; } ?> </tr> </table>

    • ベストアンサー
    • PHP
  • PHPでカレンダー

    PHPを使ってカレンダーを作成しました。が、コードの意味が良く分かりません。 コードは以下の通りです。 <?php if($_GET['num']==''){ $today_year = date("Y"); //4桁の西暦年 $today_month = date("n"); //1~12の月 }else{ $timestamp = mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year = date("Y",$timestamp); $today_month = date("n",$timestamp); //1~12月 } $current = mktime(0,0,0,$today_month,1,$today_year); $first_day = date("w",$current); //1日の曜日を0~6に当てはめる $last_day= date("t",$current); //月の日数 ?> <html> <head> <title>カンレンダー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1><?php print (date("Y年m月",$current)); ?>のカレンダー</h1> <table border="1" cellpadding="0" cellspacing="2"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1; $i<=$first_day+$last_day; $i++){ if($i%7==1){print ("<tr>");} if($i>$first_day){ print ("<td>".($i-$first_day)."</td>"); }else{ print ("<td>&nbsp;</td>"); } if($i%7==0){print ("</tr>");} } ?> </table> </body> </html> for以降の部分が良く分かりません。よろしくお願いします。※上記のスクリプトで正しく表示されることは確認済です。

    • 締切済み
    • PHP
  • 明日の日にちを表示するときは

    下記のように1日後の日付を常に表示するときは どこを変えればいいのでしょうか? <TD>※明日は<script language="JavaScript"> <!-- // 訪問日表示 now = new Date(); year = now.getYear(); if (year < 2000) year = year + 1900; month = now.getMonth()+1; day = now.getDate(); wk = new Array("日","月","火","水","木","金","土"); document.write("有効期限:"+year+"年"+month+"月"+day+"日"); // --> </script>

  • 1週間カレンダー

    こんばんは。お世話になっております。 書籍にあった下記のソースを参考に、1週間単位で表示(および週単位で移動)させたいと考えているのですが、for文などの応用が出来ず、アドバイスを頂戴できればと投函させて頂きました。 お忙しい中恐縮ですが、お力いただけたら幸いです。 描いている表示 <<    >> 日 月 火 水 木 金 土 24 25 26 27 28 29 30 <?php //感じなところでしょうが文字数制限のため省略。 //フォームにて、西暦、月を取得 //yyyy = $_POST["yyyy"]; //$yyyy = date("Y"); //$mm = date("m"); echo "<table border=\"1\">"; echo "<tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr>"; $wd1 = date("w", mktime(0, 0, 0, $mm, 1, $yyyy)); $d = 0; $lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy)); for ($i = 0; $i <= 5; $i++) { if ($d >= $lastd) {break;} echo "<tr>"; for ($j = 0; $j <= 6; $j++) { $d = $i * 7 + $j - $wd1 + 1; if ($d > $lastd or $d < 1) { echo "<td></td>"; } else { echo "<td>"; } echo $d; echo "</td>"; } } echo "</tr>"; } echo "</table>"; 丸投げのようで、すみません。そんなつもりはないのですが・・・要領が掴めず困っております。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • EP-879ABプリンターを使用しているが、USBメモリーのデータをプリントしようとすると反応がない。
  • プリンター単体テストやコピーは問題なくできるが、年賀状の印刷が急にできなくなった。
  • EP-879ABプリンターでUSBメモリーのデータをプリントする方法や、問題が発生した場合のチェックポイントについて知りたい。
回答を見る

専門家に質問してみよう