現在リニューアル中 → 旧サイトはこちら

カレンダー表示

方法(1)

function show_calendar($yyyy, $mm) { echo <<<EOD <html> <head><title>カレンダー</title></head> <body> <table border="1"> <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> EOD; // 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><br/></td>"; } else { echo "<td>$d</td>"; } } echo "</tr>"; } echo "</table></body></html>"; }

方法(2)

function show_calendar($yyyy, $mm) { //月の最初のタイムスタンプ $first_day_timestamp = strtotime($yyyy."/".$mm."/01"); //月の最初の日が月曜日以外であれば。前月の最終月曜日を算出 if (date("D", $first_day_timestamp) != "Mon") { $start = strtotime("last Monday", $first_day_timestamp); } else { $start = $first_day_timestamp; } //月末日のタイムスタンプ $last_day = date("t", $first_day_timestamp); $last_day_timestamp = strtotime($yyyy."/".$mm."/".$last_day); //ループの終了日を算出 $end = strtotime("this Sunday", $last_day_timestamp); //カレンダーテーブルの開始 echo <<<EOD <html> <head><title>カレンダー</title></head> <body> <table border="1" celspacing="0" cellpadding="4"> <tr bgcolor="#F0F0C0"> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td bgcolor="#C0C0F0">土</td> <td bgcolor="#F0C0C0">日</td> </tr> EOD; //メインループ for ($i=$start; $i<=$end; $i=strtotime("+1 day", $i)) { //月曜であれば"<tr>"を出力 if (date("D", $i) =="Mon") { print "<tr align='right'>\n"; } //該当月でない日付ならば空白 if (date("m", $i) == $mm) { $day = date("d", $i); } else { $day = "&nbsp;"; } //曜日ごとに着色 if (date("D", $i) == "Sat") { $color = "C0C0F0"; } elseif (date("D", $i) =="Sun") { $color = "F0C0C0"; } else { $color = "FFFFFF"; } //セルを出力 print "<td bgcolor='#$color'>$day</td>\n"; //日曜であれば"</tr>を出力 if (date("D", $i) == "Sun") { print "</tr>\n"; } } print "</table></body></html>"; }

方法(3)

PEARのCalendarパッケージを使用

<?php require_once("Calendar/Month/Weeks.php"); // 年月の取得 $y = isset($_GET["ymd"]) ? substr($_GET["ymd"], 0, 4) : date("Y"); $m = isset($_GET["ymd"]) ? substr($_GET["ymd"], 5, 2) : date("m"); // オブジェクト作成 $calendar = new Calendar_Month_Weeks($y, $m, 0); $calendar->build(); // 前後の年月を取得 $ymdlink = $_SERVER["PHP_SELF"] . "?ymd=%s"; $prev_m = date("Y-m", $calendar->prevMonth(true)); $next_m = date("Y-m", $calendar->nextMonth(true)); ?> <table> <tr> <td><a href="<?php echo sprintf($ymdlink, $prev_m) ?>"><< 前</a></td> <td><?php echo date("Y/m", $calendar->thisMonth(true)) ?></td> <td><a href="<?php echo sprintf($ymdlink, $next_m) ?>">次 >></a></td> </tr> </table> <table border="1"> <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> <?php while ($days = $calendar->fetch()) { $days->build(); echo "<tr>"; while ($day = $days->fetch()) { // 日付の出力 if ($day->isEmpty()) { echo "<td> </td>"; } else { echo "<td>" . $day->thisDay() . "</td>"; } } echo "</tr>"; } ?> </table> </body> </html>