ログイン

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

PHPの問題

PHP

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

問題

今月のカレンダーをテーブルタグを使って画面に表示しよう
次の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」と送信すると動画が見れます。
LINEの友達追加でお役立ち動画をGET!!