ログイン
問題13

カレンダーをテーブルタグで表示しよう

アイコン画像

問題13:カレンダーをテーブルタグで表示しよう

今月のカレンダーをテーブルタグを使って画面に表示しよう
次のCSSを適用するとキレイに表示できます

エディターのアイコンあらかじめエディタに書くコード

                table, tr, td {
    border: solid 1px;
  }
  td {
    text-align: center;
    width: 50px;
  }
¥CSS¥
              

ブラウザのアイコン期待する画面

Sun Mon Tue Wed Thu Fri Sta
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 31

※実行した日付により変わります

タグアイコン解答ソースコード

              date_default_timezone_set("Asia/Tokyo");
$month = date('m');
$year = date('Y');
$last = date("t");
$monthly = [];
$weekly;
// (a)カレンダーを作成する
for ($day = 1; $day <= $last; $day++) {
    $week = date("w", mktime(0, 0, 0, $month, $day, $year));
    if ($day == 1 || $week == 0) {
        $weekly = [];
    }
    $weekly[$week] = $day;
    if ($day == $last || $week == 6) {
        $monthly[] = $weekly;
    }
}
// (b)カレンダーを表示する
echo "Sun Mon Tue Wed Thu Fri Sta\n";
echo "---------------------------\n";
foreach ($monthly as $weekly) {
    for ($week = 0; $week <= 6; $week++) {
        if (isset($weekly[$week])) {
            echo str_pad($weekly[$week], 3, " ", STR_PAD_LEFT);
        } else {
            echo "   ";
        }
        if ($week < 6) {
            echo " ";
        }
    }
    echo "\n";
}
// おまけ
// print_r($monthly);
¥PHP¥
            

コメントのアイコン解説

カレンダーは基本的には1日から月末までとなっている。
まずは月末の日付を求めよう。
date("t")で月末の日付が返ってくるぞ。

カレンダーは横が曜日、縦が週となっている。
2次元配列にすると容易に管理できそうだ。

日にちは直列になっている。
日にちをループさせて日曜日から土曜日の単位にまとめよう。
曜日はdate("w")で求めることができる。
日曜日が0、月曜日が1と続き、土曜日が6となっている。
月初または日曜日に週のデータを初期化し、月末または土曜日にカレンダーにセットするようにしよう。

カレンダーを表示する場合は月初より前、月末より後は別の月となることに注意しよう。
出力がずれる場合はフォントを等幅フォントにすることによって綺麗に揃うぞ。

今回はデータを作る処理と表示する処理を分離することにした。
無駄に思うかもしれないが分離することによって保守性が高くなるのでおススメだ。
ログインして解答を見る
1.PHPについての説明と表示
続きの動画を見たい方は公式LINEから「PHP」と送信すると動画が見れます。
PHPを学ぶなら現役エンジニア監修「甲賀コース」
キャンペーン

閉じる