1週間カレンダーを表示する方法についてのアドバイスをお願いします

このQ&Aのポイント
  • 1週間カレンダーを1週間単位で表示し、週単位で移動させる方法についてアドバイスをお願いします。
  • 現在のコードでは、指定した西暦と月に基づいて1週間カレンダーを表示していますが、for文などの応用ができないため、週単位で移動させる方法がわかりません。
  • 問題のコードでは、指定した西暦と月を基に最初の日や最後の日を計算し、1週間ごとにテーブルに表示していますが、処理の流れが理解できず困っています。
回答を見る
  • ベストアンサー

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
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

どもですがるです。 まぁ日付けのプログラミングは、一度「日付け」というもの自体について色々と知ったほうがよい、ってのはあるのですが。 今回のケース。ぢつは「ユリウス日」ってのの知識があるとものごっつく「楽」になりますし。 んで、書かれているソースですが。2点ほど。 まず echo "<a href=\"./sukejuuru.php?d=$w_last\"><</a>"; echo "  "; echo "<a href=\"./sukejuuru.php?d=$w_next\">></a>"; ですが。これだとNGですね。 年と月も一緒に渡してあげないと、月またぎ年またぎですぐに変な動作しちゃいます。 if($_GET["d"]<>""){ $dd = $_GET["d"]; } について、月と年でもやってあげるとよいかと思います。 あともう一つは。 $w_last = $dd-7; $w_next = $dd+7; の値が、時々31越えたりマイナスに食い込んだりするのですが。 まぁ「年月」渡しておけば計算は出来るのでさほど問題ないです。 ただ、見た目が気になるようなら、 $awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $w_last, $yyyy))); を使って整理してあげてもよい…かもしれません。 多分もうほんのちょっとだと思いますので。 頑張ってください~ ^^

sadacha
質問者

お礼

galluda様 こんばんは。お世話になっております。 ユリウス日ですか・・・とても奥が深そうですね・・。 プログラミングにおいて、思わぬところで1つボキャブラリが増えたような気がします。ちょっと得した気分(笑)。 なんて冗談交じりですが、この貴重なアドバイス。今後のためにも少しずつでも理解を深めていきたく思っております。 と、取り急ぎご挨拶まで。 貴重なヒントを有難う御座いました。追ってご報告を兼ねてご連絡させて頂きます!

sadacha
質問者

補足

galluda様 こんばんは。お世話になっております。 あれから、月・年を渡すためのスクリプトを考えているのですが、前後の月・年はどのように取得したら良いのでしょうか? お教えいただいた「ユリウス日」も目を通しているのですが、一意性が見出せずに居る次第です。 galluda様にしてみればソースを書き込んだ方が楽かとは思いますが、今一度ヒントとなる考え方などをお教え頂けないでしょうか? ごゆっくりされているなか(もう大晦日なので)恐縮ですが、引き続きご指導頂けたら幸いです。宜しくお願い致します。

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がるです。 > 翌週への移動など でヒントをひとつ。 基本的に、whileループの直前のタイミングでの$ddが「スタートの日付」になっています。 つまり「そのタイミングで$ddになにが入っているか」がとても重要になるわけですね。 後は「どんなパラメタを渡すか」になるかと思います。 色々試行錯誤などしてみてください。

sadacha
質問者

お礼

galluda様 こんばんは。あれから試行錯誤を繰り返し、とりあえず下記のようなソースになりました。 今のところ、なんとか正常に動作しておりますが、GETで渡す値に「これで良いのか?」と疑問が残るところもあり、検証しては頂けないでしょうか?・・・今までDBからの検索が主だったため(とは言っても、検索も適切か?は不安があるのですが)、初めてのことが多く、特に日付に関するプログラミングは全く自信がないのです。 お忙しいところお手数お掛けし恐縮ですが、宜しくお願い申し上げます。 $yyyy = date("Y"); $mm = date("m"); $dd = date("d"); $today = $dd; if($_GET["d"]<>""){ $dd = $_GET["d"]; } else{ // 指定された日付けを含む週の「日曜日」の日付けを取得 $w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); $dd -= $w; } $w_last = $dd-7; $w_next = $dd+7; // ここから本当のスタート echo "<a href=\"./sukejuuru.php?d=$w_last\"><</a>"; echo "  "; echo "<a href=\"./sukejuuru.php?d=$w_next\">></a>"; echo "<table border=\"1\">"; echo "<tr><td><font color=\"#ff0000\">日</font></td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td><font color=\"#0000ff\">土</font></td></tr>"; echo "<tr>\n"; $i = 0; while($i++ < 7) { // 年月日を取得:本当は関数とかクラスのほうがベター $awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $dd, $yyyy))); // 表示 if($awk[1]==$mm AND $awk[2]==$today){//現在日時を太文字で表示するため echo "<td><b>".$awk[1]."/".$awk[2]."</b></td>\n"; } else{ echo "<td>".$awk[1]."/".$awk[2]."</td>\n"; } // 日付けを一つ繰り上げる $dd ++; } echo "</tr>\n"; echo "</table>\n"; ?>

sadacha
質問者

補足

galluda様 あけましておめでとう御座います。 お返事遅れて申し訳ありませんでした。最後に回答いただいた場所は既に空きがなく、こちらからご報告を兼ねたご挨拶をさせて頂きます。 あれから試行錯誤を繰り返し、些か最初の内容とは違ったものではありますが、ようやく描いていたものを作成する事が出来ました。(もちろん100%ではありませんが・・) これもgalluda様のアドバイスあっての事、感謝しております。有難う御座いました。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 んと………ちと説明が長くなりそうなので。珍しく、ソースを貼り付けてみます。 コメントとかから、挙動を少し追いかけてみていただけるとうれしいです。 // ここは実際には適宜パラメタとかから取得してください。 // このデータはテスト用ってことで $yyyy = 2006; $mm = 12; $dd = 28; // 指定された日付けを含む週の「日曜日」の日付けを取得 $w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); $dd -= $w; // ここから本当のスタート echo "<table border=\"1\">"; echo "<tr><td>日</td><td>月</td><td>火< /td><td>水</td><td>木</td><td>金< /td><td>土</td></tr>"; echo "<tr>\n"; $i = 0; while($i++ < 7) { // 年月日を取得:本当は関数とかクラスのほうがベター $awk = split("-", date("Y-m-d", mktime(0, 0, 0, $mm, $dd, $yyyy))); // 表示 echo " <td>" . $awk[2] . "</td>\n"; // 日付けを一つ繰り上げる $dd ++; } echo "</tr>\n"; echo "</table>\n"; とりあえずこれで「1週間単位で表示」は可能だと思います。

sadacha
質問者

お礼

galluda様 こんばんは。いつもお世話になっております。 >珍しく、ソースを貼り付けてみます。 本当ですね!ご回答してくださった内容を見て、「おー!」って思っちゃいました^^ なんて、冗談交じりの挨拶に恐縮ですが、まずはご挨拶にとお礼をさせて頂きます。 翌週への移動など、課題も残されているので、ご提示してくださったソースを参考に試したいと思います。 追ってご報告を兼ねてご連絡させて頂きます。 早速のご回答をありがとう御座いました。

sadacha
質問者

補足

追加のような質問で恐縮ですが、投函時はあくまで日付だけの表示ではありましたが、日付の表示を「12/29」としたり、または週間表示のはじめに「12月」のように月も含めた表示をした方が良いかと、翌週へのリンク設定も含めて試しているのですが、思うような結果を得られずにおります。 下記ソースは、翌週(前の週)にリンク設定すべく、がる様のソースにそのまま追加記述したものですが、月の表示はともかく、おかしなソースになってはいないか?そもそも月を得るためには日付の増減だけで出来るのか?と思い、ご指摘も含め、改めてご指導頂ければと記載いたしました。 とりあえず、下記ソースで週の前後の移動は出来るのですが、月表示も含め、引き続きアドバイスなど頂けたら幸いです。 if($_GET["d"]<>""){ $w = $_GET["d"]; } else{ // 指定された日付けを含む週の「日曜日」の日付けを取得 $w = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); } $dd -= $w; $w_last = $w-7; $w_next = $w+7; // ここから本当のスタート echo $mm; echo "<br>"; echo "<a href=\"./calendar.php?d=$w_next\"><</a>"; echo "  "; echo "<a href=\"./calendar.php?d=$w_last\">></a>";

関連するQ&A

  • PHPでカレンダーを作成する際の計算がわかりません

    PHPを勉強し始めた初心者です。 参考書を片手にカレンダーを作成しているのですが、 その参考書に記載されている計算の意味がわかりません。 ///////以下抜粋 <?php //年月日を取得する if ($_SERVER['REQUEST_METHOD'] = "POST") { $yyyy = $_POST["yyyy"]; $mm = $_POST["mm"]; } else { $yyyy = date("Y"); $mm = date("m"); } //年月選択リストを表示する echo "<form method=\"POST\" action=\"" . $_SERVER['PHP_SELF'] . "\">"; echo "<table><tr><td>"; //年 echo "<select name=\"yyyy\">"; for ($i = 2000; $i <= 2020; $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 "<td><input type=\"submit\" value=\"表示\" name=\"sub1\"></td>"; echo "</tr></table></form>"; //カレンダーを表示する echo"<table border=\"1\">\n <tr>\n <td>日</td>\n <td>月</td>\n <td>火</td>\n <td>水</td>\n <td>木</td>\n <td>金</td>\n <td>土</td> </tr>"; //1日の曜日を取得する $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>$d</td>"; } } echo "</tr>"; } echo "</table>"; ?> /////////////////// 上記のソースの 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>$d</td>"; } } echo "</tr>"; } この部分で、なぜ5なのかとかなぜこういう計算式なのかとかがわかりません。 どなたかこのソースの意味をご教授願いませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • 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
  • 月曜日から始まる週間カレンダーの作り方

    いつもありがとうございます。 下記のようなコードを書いて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 $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
  • phpカレンダー縦型から格子型へ

    予約状況用の既存スクリプトから表示を変更させたいのですが、 変更内容は以下の通りです。(PHP+MySQL) ▼縦型から ------------------------ |1日 |○| |2日 |×| ・・・ |31日 |×| ▼カレンダー形式へ ------------------------ | |1|2|3|4|5|6| |○|×|△|○|○|×|×| |7|8|9|10|11|12|13| |○|×|△|○|○|×|×| ・・・ ------------------------------------------------ <table border="1"> <tr bgcolor="#ffd700"> <td>日付</td> <?php // 部屋表示 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $roomid = $row["roomid"]; $roomname = cnv_dispstr($row["roomname"]); $link = $_SERVER["PHP_SELF"]."?act=det&roomid=".$roomid; ?> <td><a href="<?php echo $link?>"> <?php echo $roomname ?></a></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 // 部屋ごとの予約表示 $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $roomid = $row["roomid"]; $roomname = cnv_dispstr($row["roomname"]); $link = $_SERVER["PHP_SELF"]. "?act=upd&hiduke=".$ymd."&roomid=".$roomid; ?> <td><a href="<?php echo $link?>"> <?php echo yoyakuchk($ymd,$roomid) ?></a></td> <?php } ?> </tr> <?php } ?> </table> ------------------------------------------------ 調べたところ $lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy)); for ($i = 1; $i <= $lastd; $i++) { $days = date("d", mktime(0, 0, 0, $mm, $i, $yyyy)); $first_day = date('w', mktime(0, 0, 0, $mm, 1, $yyyy)); $last_day = date('w', mktime(0, 0, 0, $mm, $days, $yyyy)); } $last_week_days = ($days + $first_day) % 7; if ($last_week_days == 0){ $weeks = ($days + $first_day) / 7; }else{ $weeks = ceil(($days + $first_day) / 7); } 今月の日数、最初の日、最後の日の曜日、最後の週の曜日を得ればいいんだろうというところまでは分かったんですが、どう書き換えていいかわかりません。どなたか参考となるソースをご指南頂けると、とても助かります。

    • ベストアンサー
    • 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
  • PHPでカレンダーを作成するにあたって(祝日)の出力

    PHP初心者です。 勉強をかねて、PHPでカレンダーを作成しています。 カレンダー自体は作成できたと思うのですが、祝日も考慮したいので、どうコーディングすれば良いでしょうか? カレンダーは下記のように作成致しました。 <html> <head> <title>カレンダー</title> <link rel= "stylesheet" href="ookawa.css" type="text/css"> </head> <body> <table> <th colspan="7"><font size="+1"> <?php echo date("Y"); ?> <?php echo "/"; ?> <?php echo date("m"); ?> </font><font size="+1"></font></th> <tr> <td><font size="-1">日</font></td> <td><font size="-1">月</font></td> <td><font size="-1">火</font></td> <td><font size="-1">水</font></td> <td><font size="-1">木</font></td> <td><font size="-1">金</font></td> <td><font size="-1">土</font></td> </tr> <?php //当月の1日の曜日 $startwday = date("w", mktime(0, 0, 0, date("n"), 1, date("Y"))); //当月の最後の曜日 $endmday = date("t"); //当月の1日までの空欄 for($i = 0 ; $i < $startwday ; $i++) { if(($count % 7) == 0) { echo "<tr>"; } echo "<td> </td>"; $count++; } //●日付の書き込み for($i = 1 ; $i <= $endmday ; $i++) { if(($count % 7) == 0) { echo "<tr>"; } if($i == date("j")) { //☆本日の場合、背景色を黄色にする☆ echo "<td bgcolor=\"FFFF00\">"; } else { echo "<td align=\"center\ bgcolor=\"FFFF00\">"; } if(($count % 7) == 0) { //☆日曜日の場合、文字色を赤色にする☆ echo "<font color=\"red\">"; } elseif(($count % 7) == 6) { //☆土曜日の場合、文字色を青色にする☆ echo "<font color=\"blue\">"; } echo "$i"; if(($count % 7) == 0 or ($count % 7) == 6) { echo "</font>"; } echo "</td>"; $count++; if(($count % 7) == 0) { echo "</tr>\n"; } } //当月の最終日以降の空欄 for( ; ($count % 7) != 0 ; ) { echo "<td> </td>"; $count++; if(($count % 7) == 0) { echo "</tr>\n"; } } ?> </table> </body> </html> アドバイスを宜しくお願い致します。

    • 締切済み
    • PHP
  • カレンダーで今月を取得できずに困っています。

    <?php if (!$yyyy && !$mm) { $yyyy = date("Y", $time); $mm = date("n", $time); $dd = date("j", $time); } if ($_GET["hyear"]) { $yyyy = $_GET["hyear"];   $mm = $_GET["hmonth"]; $dd = $_GET["hday"];     } $dd = 1; $youbi = array("日","月","火","水","木","金","土"); $you = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); $backy = $yyyy; $backm = $mm - 1; $nexty = $yyyy; $nextm = $mm + 1; if ($backm == 0) { $backy = $yyyy - 1; $backm = 12; } if ($nextm == 13) {  $nexty = $yyyy + 1; $nextm = 1; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>カレンダー</title> </head> <?php print "<table border ='7' width='800' height='520' a colspan='7' align='center'><tr>\n"; print "<a><a href='./calender.php?year=" . $backy . "&month=" . $backm . "'>←先月</a>\n"; print $yyyy."年".$mm."月のカレンダー\n";  print "<a><a href='./calender.php?year=" . $nexty . "&month=" . $nextm . "'>来月→</a>\n";   ?> </tr> <tr> <?php print "<td bgcolor='#ffaaaa'><b>日</b></td>\n"; print "<td bgcolor='#ffffdd'><b>月</b></td>\n"; print "<td bgcolor='#ffffdd'><b>火</b></td>\n"; print "<td bgcolor='#ffffdd'><b>水</b></td>\n"; print "<td bgcolor='#ffffdd'><b>木</b></td>\n"; print "<td bgcolor='#ffffdd'><b>金</b></td>\n"; print "<td bgcolor='#ddddff'><b>土</b></td>\n"; ?> </tr> <tr> <?php if ($dd == 1) { $yo = 0; for ($i = $yo; $i < $you; $i++) { print "<td a class='cale' valign='top'>&nbsp;</a>"; } } $monday = 0; for ($i = $dd; $i < 3660; $i++) { $you = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); if ($you == 1) { $monday++; } $y2 = ($yyyy - 2000); $syunbun = (int)(20.69115 + 0.2421904 * $y2 - (int)($y2/4 + $y2/100 + $y2/400)); $syuubun = (int)(23.09000 + 0.2421904 * $y2 - (int)($y2/4 + $y2/100 + $y2/400)); //日曜日にはリンク貼らない elseif ($you == 0) { print "<td><a class='cale' align='center'><bgcolor='#ffaaaa'><font size='10' color=deeppink> $dd </font></a>\n"; } //土曜日なら elseif ($you == 6) { print "<td><a class='today' href='./yoyaku.php?hyouji=hiduke=$ymd'> <span class='cale'><align='center'><font size='10' color=green>" . $dd . "</span></font></a>"; } //今日なら elseif (($yyyy == date("Y")) && ($mm == date("n")) && ($dd == date("d"))) { print "<td><a class='today' href='./yoyaku.php?hyouji=hiduke=$ymd'> <span class='cale'><align='center'><font size='10'>" . $dd . "</span></font></a>"; } //今日以外なら else { print "<td><a class='date' href='./yoyaku.php?hyouji=hiduke=$ymd'> <span class='cale'><align='center'><font size='10'>" . $dd . "</span></font></a>"; } ?> <?php $dd++; $holiday = ""; if (checkdate($mm, $dd, $yyyy) == false) { break; } if ($you == 6) { print "</tr>\n<tr>\n"; } } //unset ($plan); $dd = $dd -1; $you = date("w", mktime(0, 0, 0, $mm, $dd, $yyyy)); if ($you < 6) { $yo = $you; for ($yo; $yo < 6; $yo++) { print "<a class='biga' align='top'>&nbsp;</a>"; } } ?> <body link="indigo" alink="yellow" vlink="indigo"> </body> <body> <h1 size = 10> </h1> <h1 style="background:#ffffff"> </tr> </table> 色々調べて直そうとしたのですが、どうしても表示させると1970年から表示されてしまい、今月から表示されません。どうしたら今月から表示されるのか教えてください。お願いします。

    • ベストアンサー
    • PHP
  • PHP 九九表

    PHPで九九の表を作っているのですが、 どうしてもここまでしか出来ませんでした。 <tr>,<td>を消してみると 数字が横に一列に表示されており、かけ算にはなっているのですが、 表にはどうしてもなりません。 なにかが違うのは分かっているのですが、ないが違うのか分かりません。 誰かお分かりになるかたがいましたらお伺いできませんでしょうか。 <?php echo '<table>'; echo '<tr>'; for ($i = 1; $i <= 9; $i++ ) { for ($j = 1; $j <= 9; $j++ ) echo '<td>' $i * $j'</td>'; echo '</tr>'; } echo '</table>'; ?>

    • ベストアンサー
    • PHP
  • PHP かけ算

    PHPを使い下記の表を作ろうとしております。 ぱっと見た所あと少しで出来そうな気もするのですが、 なにかが間違っています。 誰かお分かりになるかたが今したらお伺いできますでしょうか。 | 1 2 3 4 5 6 7 8 9 -------------------------------- 1| * 2 * 4 * 6 * 8 * 2| 2 * 6 * 10 * 14 * 18 3| * 6 * 12 * 18 * 24 * 4| 4 * 12 * 20 * 28 * 36 5| * 10 * 20 * 30 * 40 * 6| 6 * 18 * 30 * 42 * 54 7| * 14 * 28 * 42 * 56 * 8| 8 * 24 * 40 * 56 * 72 9| * 18 * 36 * 54 * 72 * <table border ="1"> <?php for($i = 0; $i <=9; $i++){ echo'<tr>'; if($i == 0){ echo '<td>&nbsp;</td>'; } else { echo'<td>'.$i.'</td>'; } for($j = 1; $j<=9; $j++){ if($i == 0){ echo'<td>'.$j.'</td>'; continue; } if($i*$j % 2 == 0) { echo '<td>'. $i * $j.'</td>'; } else { echo '<td>*</td>'; } } echo '</tr>'; } ?> </table>

    • ベストアンサー
    • PHP

専門家に質問してみよう