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
※実行した日付により変わります
問題13:カレンダーをテーブルタグで表示しよう
今月のカレンダーをテーブルタグを使って画面に表示しよう
次のCSSを適用するとキレイに表示できます
次のCSSを適用するとキレイに表示できます
あらかじめエディタに書くコード
table, tr, td {
border: solid 1px;
}
td {
text-align: center;
width: 50px;
}
¥CSS¥
期待する画面
解答ソースコード
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¥
#忍者CODE無料問題集で活動を記録しよう
完了にする!
1.PHPについての説明と表示
まずは月末の日付を求めよう。
date("t")で月末の日付が返ってくるぞ。
カレンダーは横が曜日、縦が週となっている。
2次元配列にすると容易に管理できそうだ。
日にちは直列になっている。
日にちをループさせて日曜日から土曜日の単位にまとめよう。
曜日はdate("w")で求めることができる。
日曜日が0、月曜日が1と続き、土曜日が6となっている。
月初または日曜日に週のデータを初期化し、月末または土曜日にカレンダーにセットするようにしよう。
カレンダーを表示する場合は月初より前、月末より後は別の月となることに注意しよう。
出力がずれる場合はフォントを等幅フォントにすることによって綺麗に揃うぞ。
今回はデータを作る処理と表示する処理を分離することにした。
無駄に思うかもしれないが分離することによって保守性が高くなるのでおススメだ。