【PHP初心者必見】カレンダーの休み表示方法とは?

このQ&Aのポイント
  • カレンダーの休み表示について、PHP初心者の方向けに解説します。具体的なコード例を交えて説明します。
  • カレンダーに表示する日付と曜日の一覧から、定休日の'月'と'金'の日付を除外する方法をご紹介します。
  • アレンジ方法やコードの書き方など、詳細な手順を解説します。初心者でもわかりやすいように説明します。
回答を見る
  • ベストアンサー

php カレンダーの休み表示

PHP初心者です。 以下のように『今日』から14日分の日付と曜日の <select>を作ったのですが、定休日の’月’と’金’の日付だけ 表示を消したいのですが、どうしたらよいのでしょうか? (表示イメージ) 9月11日(火) 9月12日(水) 9月13日(木) 9月15日(土) 9月16日(日) 9月18日(火)   ・    ・   ・ <select> <?php $week = array( '日', '月', '火', '水', '木', '金', '土' ); for($i=0; $i<=14; $i++){ $w = $week[(date(w)+$i)%7]; $date = date('m/d' , strtotime("$i day")) . "($w)"; print '<option value="'.$i.'">' . $date . '</option>'; } ?> </select>   ↑ これをどのようにアレンジしたらよいのでしょうか? よろしくお願いします。 

  • PHP
  • 回答数1
  • ありがとう数1

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

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

たとえばこんな感じ <select> <?php $week = array( '日', '月', '火', '水', '木', '金', '土' ); for($i=0; $i<=14; $i++){ $w=(date(w)+$i)%7; if(in_array($w,array(1,5))) continue; $date = date('m/d' , strtotime("$i day")) . "(".$week[$w].")"; print '<option value="'.$i.'">' . $date . '</option>'; } ?> </select>

hayaken73
質問者

お礼

yambejpさん ありがとうございます。 ホント助かります。 しかし、こんなにさらっとプログラムできると 楽しいでしょうね。早く自分も頭の中の構想を 文字にできるようがんばります。 ありがとうございました。

関連するQ&A

  • 日付を表示するプログラム

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

    • ベストアンサー
    • PHP
  • PHPで明日の日付と明日の曜日を取得したい

    <td align="center"><?php date_default_timezone_set('Asia/Tokyo'); $week2 = array( 'Mon'=>'月', 'Tue'=>'火', 'Wed'=>'水', 'Thu'=>'木', 'Fri'=>'金', 'Sat'=>'土', 'Sun'=>'日' ); $w = $week2[date('D')]; echo date("j日") . "($w)"; ?></td> 上記のコードで今日の日付と曜日が取得出来るのですが、明日の日付と明日の曜日を取得するのはどうすれば良いのでしょうか。

  • PHPカレンダー

    PHPでシンプルなカレンダーを作成していますが、曜日を日本語表記させたいと思いますが、どうにもうまくいきません。 月の初めのセルから表示させていきたいのですが解決方法に悩んでいます。 $first_cell[0] = array("日","月","火","水","木","金","土");

    • 締切済み
    • PHP
  • PHPによるカレンダーについて

    PHPでカレンダーを作成しています。 プルダウンで年月を指定し、更新ボタンを押せば、指定した年月のカレンダーを表示させたいのですが、うまくいきません。 更新ボタンを押してもカレンダーが変わらないです。 KOMOカレンダーというサイトを参考にして、文字コードを変えただけです。 教えてくださる方がいらっしゃいましたら宜しくお願いいたします。 <?php $last_year = 2037; $wday_color = "#000000"; $sat_color = "#0000ff"; $sun_color = "#ff0000"; $reg_color = "#ffccff"; $year = (!isset($year)) ? date("Y") : $year; $month = (!isset($month)) ? date("n") : $month; ?> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>カレンダー</TITLE> </HEAD> <BODY> <P><FONT SIZE="6" COLOR="#006600">カレンダー</FONT></P> <P> <TABLE BORDER="1"CELLSPACING="1" CELLPADDING="1"> <TR> <TD COLSPAN="7"> <SELECT NAME="year"> <?php for($i = 2002; $i <= $last_year; $i++){ echo "<option value=".$i.(($i == $year) ? ' selected':'').">".$i."年\n"; } ?> </SELECT> <SELECT NAME="month"> <?php for($i = 1; $i <= 12; $i++){ echo "<option value=" . $i . (($i == $month) ? ' selected':'').">".$i."月\n"; } ?> </SELECT> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="更新"></TD> </TR> <TR> <TD> <P ALIGN="CENTER"><FONT COLOR="red">日</FONT> </TD> <TD> <P ALIGN="CENTER">月 </TD> <TD> <P ALIGN="CENTER">火 </TD> <TD> <P ALIGN="CENTER">水 </TD> <TD> <P ALIGN="CENTER">木 </TD> <TD> <P ALIGN="CENTER">金 </TD> <TD> <P ALIGN="CENTER"><FONT COLOR="blue">土</FONT> </TD> </TR> <?php $time = mktime(0, 0, 0, $month, 1, $year); $day_of_first = date("w", $time); $date_of_month = date("t", $time); $week_of_month = ceil($date_of_month / 7); if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){ $week_of_month++; } for($i = 1; $i <= $week_of_month * 7; $i++){ if($i % 7 == 1){ echo "<tr>"; } if(($i - 1 < $day_of_first) || ($i > $date_of_month + $day_of_first)){ echo "<td>&nbsp;</td>"; }else{ if($i % 7 == 1){ $color = $sun_color; }elseif($i % 7 == 0){ $color = $sat_color; }else{ $color = $wday_color; } echo "<td width=30 height=30 align=right valign=top>"; echo "<font color=" . $color . ">"; echo $i - $day_of_first; echo "</font></td>"; } if($i % 7 == 0){ echo "</tr>\n"; } } ?> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPで前来月一部が表示され週表示ありのカレンダー

    質問失礼します 現在、PHPで下記のようなカレンダーを作成しています テーブル例: +--+--+--+--+--+--+--+ │日│月│火│水│木│金│土│ +--+--+--+--+--+--+--+ │  │  │  │  │ 1│ 2│ 3│ +--+--+--+--+--+--+--+ │ 4│ 5│ 6│ 7│ 8│ 9│10│ +--+--+--+--+--+--+--+ │11│12│13│14│15│16│17│ +--+--+--+--+--+--+--+ │18│19│20│21│22│23│24│ +--+--+--+--+--+--+--+ │26│27│28│29│30│31│  │ +--+--+--+--+--+--+--+ ※日曜と土曜と今日は文字色変えてます ※すべてのページにリンクを貼っています 参考元:http://www.phppro.jp/qa/detail.php?id=3011 今回、それに下記の2点を加えてカレンダーを作りたいと思っています ・週の最後に集計用セル ・前月および来月の日付も加える テーブル例: +--+--+--+--+--+--+--+--+ │日│月│火│水│木│金│土│週│ +--+--+--+--+--+--+--+--+ │28│29│30│31│ 1│ 2│ 3│週│ +--+--+--+--+--+--+--+--+ │ 4│ 5│ 6│ 7│ 8│ 9│10│週│ +--+--+--+--+--+--+--+--+ │11│12│13│14│15│16│17│週│ +--+--+--+--+--+--+--+--+ │18│19│20│21│22│23│24│週│ +--+--+--+--+--+--+--+--+ │26│27│28│29│30│31│ 1│週│ +--+--+--+--+--+--+--+--+ いろいろ探してはみたものの、現在のカレンダーの形のものばかりで、 理想のものにたどり着けず質問させていただきました。 参照になるサイトなどご存じの方いらっしゃいましたら、ご教授お願いいたします。

    • ベストアンサー
    • 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
  • PHP カレンダー

    php初心者です。HTMLにカレンダーのソースを、そのまま下記のHPから埋め込んだのですが、表示されません。なぜでしょうか? http://shanabrian.com/web/php_calendar.php --------------HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>index</title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <?php function calendar($year, $month) { //月末 $l_day = date("j", mktime(0, 0, 0, $month + 1, 0, $year)); //初期出力 $tmp = <<<EOM <table cellspacing="0" cellpadding="0" border="0" class="calendar"> <caption>{$year}年{$month}月</caption> <tr> <th class="red">日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th class="blue">土</th> </tr>\n EOM; //月末分繰り返す for ($i = 1; $i < $l_day + 1;$i++) { //曜日の取得 $week = date("w", mktime(0, 0, 0, $month, $i, $year)); //曜日が日曜日の場合 if ($week == 0) { $tmp .= " <tr>\n"; } //1日の場合 if ($i == 1) { $tmp .= str_repeat(" <td>&nbsp;</td>\n", $week); } if ($i == date("j") && $year == date("Y") && $month == date("n")) { //現在の日付の場合 $tmp .= " <td class=\"today\">{$i}</td>\n"; } else { //現在の日付ではない場合 $tmp .= " <td>{$i}</td>\n"; } //月末の場合 if ($i == $l_day) { $tmp .= str_repeat(" <td>&nbsp;</td>\n", 6 - $week); } //土曜日の場合 if($week == 6) { $tmp .= " </tr>\n"; } } $tmp .= "</table?>\n"; return $tmp; } ?> <?= calendar(date("Y"), date("n")) ?> </body> </html> ---------------------CSS table.calendar { border-collapse:collapse; border:1px #666 solid; text-align:center; font-size:12px; } table.calendar td, table.calendar th { padding:5px; border:1px #666 solid; } table.calendar th { background:#eee; } table.calendar td.today { background:#999; color:#fff; } table.calendar .red { color:#f33; } table.calendar .blue { color:#33f; }

    • ベストアンサー
    • PHP
  • フォームに日付を出力したい

    予約フォームを作っております。日付を選択するフォーム箇所に 出力するデータは今日の日付から1週間後から1週間以内を表示する 規則としています。 for ($i = 7; $i < 15; $i++) { $date[$i] = date('Y/m/d (w)', strtotime($i . ' days', time())); } これで任意の日付を出力することはできたのですが(w)の箇所が このままですと曜日が0~6で表示されてしまいます。 $wday = array('日', '月', '火', '水', '木', '金', '土'); と曜日用の配列をつくり置き換えたいのですがどう組み込めばいい ものか教えてください。 また以下のような特定の日付(任意の休日)を設定しその日があれば フォームには表示させないようにする事はどうすれば可能でしょうか? $holiday = array('2009/02/05', '2009/02/15'); 宜しくお願い致します。

    • 締切済み
    • PHP
  • 月曜日から始まる週間カレンダーの作り方

    いつもありがとうございます。 下記のようなコードを書いて1週間のカレンダーを作っていますが、 どうしても日曜日からの表示になります。 この表示を月曜日から始まり、日曜日で終わるカレンダーにならないものか考えるのですが、どうもうまくいきません。 よきアドバイスをお願いします。 <? //来週・前週の---日曜日----をgetした値 $get_sunday = htmlspecialchars($_GET["get_sunday"]); $entry_day = htmlspecialchars($_GET["entry_day"]); //変数の値の識別カレンダー表示 //get_sunday (来週・前週)の値がgetされていたら if($get_sunday!=""){ //getされた日曜日の日付 $mm = date("m",strtotime($get_sunday)); $dd = date("d",strtotime($get_sunday)); $yyyy = date("Y",strtotime($get_sunday)); //getされた日曜日の日付(日のみ) $sunday_num = $dd; //getされた日曜日の日付(年月日) $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); } // ================================================= //変数の値の識別           カレンダー表示 //entry_day (指定した日)の値をgetされたら if($entry_day!=""){ $mm = date("m",strtotime($entry_day)); $dd = date("d",strtotime($entry_day)); $yyyy = date("Y",strtotime($entry_day)); //$week_numに今日の曜日ナンバーを代入(mktime(0,0,0,今日の月,今日の日,今日の年) //日0・月1・火2・水3・木4・金5・土6 $week_num = date("w", mktime(0,0,0,$mm,$dd,$yyyy)); //entry_dayの値 $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); //日曜日の日付(日のみ) $sunday_num = $dd - $week_num; } // ================================================= //変数の値がない場合は本日の日付の取得 カレンダー表示 if($get_sunday=="" and $entry_day==""){ $mm = date("m",time()); $dd = date("d",time()); $yyyy = date("Y",time()); //$week_numに今日の曜日ナンバーを代入(mktime(0,0,0,今日の月,今日の日,今日の年) $week_num = date("w", mktime(0,0,0,$mm,$dd,$yyyy)); $kyujin_day = date("Y-m-d",mktime(0,0,0,$mm,$dd,$yyyy)); //日曜日の日付(日のみ) $sunday_num = $dd - $week_num; } //前週、次週に日曜日の日付を取得    カレンダー表示 $sunday_last = $sunday_num - 7; $sunday_next = $sunday_num + 7; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>レンダー画面</title> </head> <body> <table> <tr> <td></td> <td bgcolor="#00FFFF">日</td> <td bgcolor="#00FFFF">月</td> <td bgcolor="#00FFFF">火</td> <td bgcolor="#00FFFF">水</td> <td bgcolor="#00FFFF">木</td> <td bgcolor="#00FFFF">金</td> <td bgcolor="#00FFFF">土</td> <td></td> </tr> <tr> <form method="get" name="form2"action="test2.php"> <td> <input type="hidden" name="get_sunday" value= "<?php echo date("Y-m-d", mktime(0, 0, 0, $mm, $sunday_last, $yyyy)); ?>"> <input type="submit" name="Submit2" value="前週へ"> </td> </form> <? //週カレンダー(前週ボタン作成)ここまで //週カレンダー日付を入れる $w2 = $sunday_num; $select_day = date("Y-m-d", mktime(0, 0, 0, $mm, $w2, $yyyy)); $i = 0; while($i < 7) { //日曜日から順に日付を$select_dayに入れていく ?> <td bgcolor="#CCFFFF"><? echo date("m月d日", mktime(0, 0, 0, $mm, $w2+$i, $yyyy)) ?></td> <? // 日付けを一つ繰り上げる $i++; } ?> <form method="get" name="form2" action="test2.php"> <td> <input type="hidden" name="get_sunday" value= "<?php echo date("Y-m-d", mktime(0, 0, 0, $mm, $sunday_next, $yyyy)); ?>"> <input type="submit" name="Submit" value="次週へ"> </td> </form> </table> </body> </html>

    • 締切済み
    • PHP
  • PHPのカレンダーに曜日をつけられづに困っています。

    <?php // 日付 if (!isset($hiduke)) { $hiduke = date("Y-m-d"); } if (!isset($yyyy)) { $yyyy = date("Y", strtotime($hiduke)); } if (!isset($mm)) { $mm = date("m", strtotime($hiduke)); } if (!isset($dd)) { $dd = date("d", strtotime($hiduke)); } // 表示ページ if (isset($_GET["act"])) { $act = $_GET["act"]; } if (!isset($act)) { $act = ""; } // ================================================= //  処理開始 ?> <?php conndb();?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <title>予約システム</title> </head> <body> <h2>予約システム</h2> <?php // -- ページ内容の表示 switch ($act) { case "upd": // 更新 gamen_upd(); break; case "updconf": // 更新確認 gamen_updconf(); break; case "delconf": // 削除確認 gamen_delconf(); break; case "det": // 詳細表示 gamen_detail(); break; default: gamen_iti(); } ?> </body> </html> <?php closedb(); ?> <?php // ================================================= // ----- 一覧表示画面 function gamen_iti() { global $conn; global $hiduke; global $yyyy; //年 global $mm; //月 $array = cnv_formstr($_POST); extract($array, EXTR_SKIP); if (isset($kbn)) { if ($kbn == "upd" or $kbn == "del") { update_yoyaku($kbn); } } $sql = "SELECT * FROM jikan ORDER BY timeid"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); ?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table border="1"> <tr> <td><?php setmonth(); ?></td> <td><input type="submit" name="sub" value="予約表示"></td> </tr> </table> <input type="hidden" name="act" value="iti"> <input type="hidden" name="kbn" value="go"> </form> <p><?php echo date("Y 年 m 月 ", mktime(0, 0, 0, $mm, 1, $yyyy)) ?>予約一覧 <table border="1"> <tr bgcolor="#ffd700"> <td>日付</td> <?php // 時間表示 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $timeid = $row["timeid"]; $jikan = cnv_dispstr($row["jikan"]); ?> <td><?php echo $jikan ?></td> <?php } ?> </tr> <?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   <?php } ?> </table> <?php } // ================================================= // ----- 年月選択リスト表示 function setmonth() { global $yyyy; global $mm; $array = cnv_formstr($_POST); extract($array, EXTR_SKIP); echo "<table><tr><td>"; // 年 echo "<select name=\"yyyy\">"; for ($i = 2008; $i <= 2025; $i++) { echo "<option"; if ($i == $yyyy) { echo " selected "; } echo ">$i"; } echo "</select>年"; // 月 echo "<select name=\"mm\">"; for ($i = 1; $i <= 12; $i++) { echo "<option"; if ($i == $mm) { echo " selected "; } echo ">$i"; } echo "</select>月"; echo "</td>"; echo "</tr></table>"; } ?> と参考書を見ながら、作っています。 PHPはまったくの初心者です。カレンダーの日付に曜日をつけられづに困っています。コードを含め詳しくをしえてもらえると助かります。よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう