今月のカレンダー:テーブル
今月のカレンダー(テーブル表示)
今度はカレンダーをテーブルで表示します。以下のようなカレンダーが出来上がります。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 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 |
取得したい値などは今月のカレンダー(一覧表示)と同じですので省きます。
テーブルで表示するのでもちろん<table>関連のタグを一通り使います。
- ○○年○月の部分はテーブルの<caption>タグを使います。
- 見出しタグ<th>に日〜土の曜日を配置します。
- 日付が存在する間、日にちを<td>タグの中に挿入しながらループし、空白セルには「 」と空白を挿入します。
- それだけでは1行で表示されてしまうので曜日の数(7回)だけループしたら行を変えます。テーブルなので行を変えるには</tr><tr>タグを挿入します。
- 土曜日・日曜日と今日の日付の色を変更したいのでスタイルシートの設定をします
- 日曜―文字色:赤(#CC3300)
- 土曜―文字色:青(#0033CC)
- 今日―背景色:銀(silver)
使用する関数は今月のカレンダー(一覧表示)で使用する関数に加えてcheckdate関数です。
参考関数
date()---- 日付・時刻を書式化するmktime()---- 指定した日時のUNIXタイムスタンプを取得するcheckdate()---- 日付の妥当性を確認する(グレゴリオ暦)
checkdate関数は引数に指定した日付が存在すればTRUEを・存在しなければFALSEを返してくる便利な関数です。これをループの条件式に使います。
date関数で使用するフォーマット文字は今月のカレンダー(一覧表示)と一緒です。
カレンダーサンプルソース
<?php
$now_year = date("Y"); // 現在の年を取得
$now_month = date("n"); // 在の月を取得
$now_day = date("j"); // 現在の日を取得
// 曜日の配列作成
$weekday = array( "日", "月", "火", "水", "木", "金", "土" );
// 1日の曜日を数値で取得
$fir_weekday = date( "w", mktime( 0, 0, 0, $now_month, 1, $now_year ) );
echo '<table border="1" cellspacing="0" cellpadding="5" style="text-align:center;">';
// 見出し部分<caption>タグ出力
echo "<caption style=\"color:black; font-size:14px; padding:0px;\">"
.$now_year."年".$now_month."月のカレンダー
</caption>\n";
echo "<tr>\n";
// 曜日セル<th>タグ設定
$i = 0; // カウント値リセット
while( $i <= 6 ){ // 曜日分ループ
//-------------スタイルシート設定---------------------------------
if( $i == 0 ){ // 日曜日の文字色
$style = "#C30";
}
else if( $i == 6 ){ // 土曜日の文字色
$style = "#03C";
}
else{ // 月曜〜金曜日の文字色
$style = "black";
}
//-------------スタイルシート設定終わり---------------------------
// <th>タグにスタイルシートを挿入して出力
echo "\t<th style=\"color:".$style."\">".$weekday[$i]."</th>\n";
$i ++; //カウント値+1
}
// 行の変更
echo "</tr>\n";
echo "<tr>\n";
$i = 0; //カウント値リセット(曜日カウンター)
while( $i != $fir_weekday ){ //1日の曜日まで空白( )で埋める
echo "\t<td> </td>\n";
$i ++;
}
// 今月の日付が存在している間ループする
for( $day=1; checkdate( $now_month, $day, $now_year ); $day++ ){
//曜日の最後まできたらカウント値(曜日カウンター)を戻して行を変える
if( $i > 6 ){
$i = 0;
echo "</tr>\n";
echo "<tr>\n";
}
//-------------スタイルシート設定-----------------------------------
if( $i == 0 ){ //日曜日の文字色
$style = "#C30";
}
else if( $i == 6 ){ //土曜日の文字色
$style = "#03C";
}
else{ //月曜〜金曜日の文字色
$style = "black";
}
// 今日の日付の場合、背景色追加
if( $day == $now_day ){
$style = $style."; background:silver";
}
//-------------スタイルシート設定終わり-----------------------------
// 日付セル作成とスタイルシートの挿入
echo "\t<td style=\"color:".$style.";\">".$day."</td>\n";
$i++; //カウント値(曜日カウンター)+1
}
while( $i < 7 ){ //残りの曜日分空白( )で埋める
echo "\t<td> </td>\n";
$i++;
}
echo "</tr>\n";
echo "</table>\n";
?>
出力結果
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 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 |
一覧表示に比べて大分カレンダーらしくなりました。


