シンプルカレンダー表示サンプル
<< 2024 / 11 >>
               1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
<?php

///////////////////////////////////////////////////////////////
//
// シンプルカレンダー表示サンプル
//
////////////////////////////////////////////////////////////////

//曜日名称
$wday = array("日","月","火","水","木","金","土");

//カレンダーの表示年月
$date = htmlspecialchars(chop($_POST["date"]));
if($date == ""){
  $date = date('Y-m');
}
//カレンダー移動
if($_POST["move"] == "N"){
  // 'N' 次月に移動
  $date = date('Y-m',mktime(0,0,0,substr($date,5,2)+1,1,substr($date,0,4)));
}elseif($_POST["move"] == "P"){
  // 'P' 前月に移動
  $date = date('Y-m',mktime(0,0,0,substr($date,5,2)-1,1,substr($date,0,4)));
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//  カレンダー表示
//  $YM yyyy-mm(ex.'2007-04')
//  省略された場合現在の年月のカレンダーを表示
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function makeCalender($YM){
  global $wday;

  //引数チェック
  if($YM == ""){
    $YM = date('Y-m');
  }else{
    if(preg_match("/\d{4}\-\d{2}/",$YM) === false){
      return "年月不正";
    }
  }
  $y = substr($YM,0,4);
  $m = substr($YM,5,2);
  if(!checkdate($m,1,$y)){
    return "年月不正";
  }

  //指定月の1日の曜日を取得
  $wd1   = date("w", mktime(0,0,0,$m,1,$y));
  //月末の日を取得
  $lastd = date("d", mktime(0,0,0,$m+1,0,$y));

  //カレンダー出力ヘッダ部
  $calender  = "";
  $calender .= "<table class=\"cal\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"text-align:center;\">\n";
  $calender .= "<tr class=\"head\">\n";
  $calender .= "<td><a href=\"#\" onclick=\"m('P');\">&lt;&lt;</a></td>\n";
  $calender .= "<td colspan=\"5\" style=\"font-weight:bold;\">".sprintf("%4d / %02d",$y,$m)."</td>\n";
  $calender .= "<td><a href=\"#\" onclick=\"m('N');\">&gt;&gt;</a></td>\n";
  $calender .= "</tr>\n";
  $calender .= "<tr class=\"head\">\n";
  $calender .= "<td class=\"red\">".$wday[0]."</td>\n";
  $calender .= "<td>".$wday[1]."</td>\n";
  $calender .= "<td>".$wday[2]."</td>\n";
  $calender .= "<td>".$wday[3]."</td>\n";
  $calender .= "<td>".$wday[4]."</td>\n";
  $calender .= "<td>".$wday[5]."</td>\n";
  $calender .= "<td class=\"blue\">".$wday[6]."</td>\n";
  $calender .= "</tr>\n";

  //カレンダー出力日付部
  for($i = 0; $i <= 5; $i++){
    if($d >= $lastd){
      break;
    }
    $calender .= "<tr style=\"text-align:center;background-color:#ffffff;\">\n";
    for($j = 0; $j <= 6; $j++) {
      $d = ($i * 7) + ($j - $wd1) + 1;
      if ($d > $lastd or $d  < 1) {
        $calender .= "<td style=\"background-color:#eeeeee;\">&nbsp;&nbsp;</td>\n";
      }else{
        if(sprintf("%4d%02d%02d",$y,$m,$d) == date('Ymd')){
          //現在の月日に一致した時
          $calender .= "<td style=\"background-color:#ffff00;\">".sprintf("%2d",$d)."</td>\n";
        }else{
          switch($j){
            case 0: //日曜日
              $calender .= "<td style=\"color:#ff0000;\">".sprintf("%2d",$d)."</td>\n";
              break;
            case 6: //土曜日
              $calender .= "<td style=\"color:#0000ff;\">".sprintf("%2d",$d)."</td>\n";
              break;
            default: //平日
              $calender .= "<td>".sprintf("%2d",$d)."</td>\n";
          }
        }
      }
    }
    $calender .= "</tr>\n";
  }
  $calender .= "</table>\n";
  print $calender;
}
?>

<html>
  <head>
    <title>シンプルカレンダーサンプル</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta equiv="expires" content="0" />
    <!--// カレンダー表示部スタイル //-->
    <style type="text/css">
      .cal {font-size:11pt;border-style:outset;border-collapse:collapse;width:220px;height:150px;}
      .red {background-color:#FFCCCC;}
      .blue {background-color:#CCCCFF;}
      .head {background-color:#CCFFCC;}
      A:hover { background-color:#FFFF00; color:#000099; text-decoration: none;}
    </style>
    <!--// カレンダー移動用javascript関数 //-->
    <script type="text/javascript">
      function m(strM){
        document.getElementById("move").value = strM;
        document.getElementById("f01").method = "post";
        document.getElementById("f01").action = "cal.php";
        document.getElementById("f01").submit();
      }
    </script>
  </head>
  <body>
  <form id="f01">
    シンプルカレンダー表示サンプル
    <!-- 現在表示している年月を保持 //-->
    <input id="date" type="hidden" name="date" value="2024-11">
    <!-- カレンダー移動用 //-->
    <input id="move" type="hidden" name="move">
<?php
  //カレンダー出力
  makeCalender($date);
?>

  </form>
  </body>
</html>