KOMOカレンダー

 えー、そろそろお待ちかねのカレンダーの生成について解説をさせて頂きます。とは言うものの、実は僕も参考書を見ながら作ったんですけどね・・・(^^ゞ理屈さえ分かれば意外と簡単に作れますので、皆さんも挑戦して見ては?!(^.^)

<?php
//初期設定
$last_year = 2037;
//平日の文字色は黒
$wday_color = "#000000";
//土曜日の文字色は青
$sat_color = "#0000ff";
//日曜日の文字色は赤
$sun_color = "#ff0000";
//スケジュールが登録されている場合の背景色は淡いピンク
$reg_color = "#ffccff";
//変数$yearがセットされていなければ当年
$year = (!isset($year)) ? date("Y") : $year; ←条件演算子
//変数$monthがセットされていなければ当月
$month = (!isset($month)) ? date("n") : $month; ←条件演算子
?>
初期設定部分です。各変数を定めています。

最初にページを開いた時は、年月に関する変数がセットされていないので、
date( )関数を使ってアクセスした時の年月のデータを取得しています。

[条件演算子]
(式1) ? (式2) : (式3);
式1がtrueの場合に式2を、式1がfalseの場合に式3を返します。
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
<TITLE>KOMOカレンダー</TITLE>
</HEAD>
<BODY>
<FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
<P><FONT SIZE="6" COLOR="#006600">KOMOカレンダー</FONT></P>
<P>
<TABLE BORDER="3" CELLSPACING="1" CELLPADDING="1">
<TR>
<TD COLSPAN="7">
通常のHTML表示部分です。
<SELECT NAME="year"> 年表示の為のドロップダウンリストの開始。
<?php
for($i = 2002; $i <= $last_year; $i++){
 echo "<option value=" . $i . (($i == $year) ? ' selected' : '') . ">" . $i . "年\n";
}
?>
年表示の為のドロップダウンリストをPHPで自動生成しています。選択表示の際にタグに「 selected」を付ける部分の処理が微妙ですね(^.^)

年表示は一応2002年から2037年まで。forでループ処理しています。
</SELECT> 年表示の為のドロップダウンリストの終了。
<SELECT NAME="month"> 月表示の為のドロップダウンリストの開始。
<?php
for($i = 1; $i <= 12; $i++){
 echo "<option value=" . $i . (($i == $month) ? ' selected' : '') . ">" . $i . "月\n";
}
?>
月表示の為のドロップダウンリストをPHPで自動生成しています。処理内容は上と一緒(^.^)

月表示は1月から12月まで。forでループ処理しています。
</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);
カレンダーを生成する為の計算基準となる変数の値を取得しています。

★int mktime( int hour ,int minute ,int second ,int month ,int day ,int year [ ,int is_dst ] )関数・・・引数で渡された時刻のUNIXのタイムスタンプを返します。

★string date( string format [ , int timestamp ] )関数・・・引数timestamp を、指定されたフォーマット文字列によりフォーマットし、日付文字列を返します。
w」・・・曜日。数値。"0"(日曜)から"6"(土曜日)まで。
t」・・・指定した月の日数。"28"から"31"。

★int ceil( float number )関数・・・引数number の小数点以下を切り上げて返します。
if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){
 $week_of_month++;
}
%」・・・剰余演算。割った余りを求める。

条件に合致すれば、その月の週数を1プラスします。
//カレンダーを出力
for($i = 1; $i <= $week_of_month * 7; $i++){
 if($i % 7 == 1){
  echo "<tr>";
 }
各行の最初のタグ<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>
HTML表示を終了します。

 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。

HOME