PHPでカレンダーを作ろう!(data関数応用編)

PHP PHP

今回はphpでカレンダーを作ってみます。
date関数を使用しますので、使ってことがない方はこちらの記事をご参考にどうぞ。
お急ぎの方は下記の完成コードをご覧下さい。

カレンダーの完成コード

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PHPでカレンダー作成</title>
    <style>
    table,tr,td,th{ border: solid 1px black; border-collapse: collapse; }
    .Saturday{ color:blue; }
    .Sunday{ color:red; }
    .Today{ background:yellow; }
    </style>
</head>
<body>
<?php
/* 見出し(曜日)の配列を作成する */
    $youbi = ['日','月','火','水','木','金','土'];
/* 今月頭の年月日を取得する */
    $today = date('Y-m').'-01';
/* 表示するカレンダーの年月を表示 */
    print date('Y年m月');
/* テーブルタグを表示 */
    print '<table>';
/* 見出し含め、7行分ループ処理 */
    for($i=0;$i<7;$i++){
/* テーブルのtrタグを表示(行) */
        print '<tr>';
/* 一週間(7日)ループ処理 */
        for($j=0;$j<7;$j++){
/* 見出し部分(最初の行)か */
            if($i==0){/* $iが0の時は、先頭行なので、曜日を表示する。 */
/* 今表示するのは何曜日? */
                switch($j){
                    case 0:/* 日曜日(クラス付与)  */
                        print '<th class="Sunday">';
                        break;
                    case 6:/* 土曜日(クラス付与)  */
                        print '<th class="Saturday">';
                        break;
                    default:/* その他 */
                        print '<th>';
                        break;
                }
/* 曜日を表示 */
                print $youbi[$j].'</th>';
            }else{/* $iが0以外の時は、2行目以降なので、日を表示する。 */
/* 処理する日は今月か? */
                if($today<=date('Y-m-t') && date('w',strtotime($today))==$j){
/* 今表示するのは何曜日? */
                    switch($j){
                        case 0:/* 日曜日(クラス付与)  */
                            print '<td class="Sunday ';
                            break;
                        case 6:/* 土曜日(クラス付与)  */
                            print '<td class="Saturday ';
                            break;
                        default:/* その他 */
                            print '<td class="';
                            break;
                    }
/* 今日は背景を黄色にする(クラス付与) */
                    if($today==date('Y-m-d')){
                        print 'Today';
                    }
/* 日を表示 */
                    print ' ">'.date('d',strtotime($today)).'</td>';
/* 次の処理用に年月日を+1日更新 */
                    $today = date('Y-m-d',strtotime($today.' +1 days'));
                }else{
/* 今月外の場合は枠だけ表示 */
                    print '<td> </td>';
                }
            }
        
        }
/* テーブルのtrタグ終わりを表示 */
        print '</tr>';
    }
/* テーブルの終わりを表示 */
    print '</table>';
?>
</body>
</html>
カレンダー

上のコードで完成したカレンダーがこちら!
こちらをベースにデザインやカラーを変更してみてください。

PHPカレンダーのポイント解説

18行目の、
$today = date(‘Y-m’).’-01′;
で、今月頭の年月日を $today に設定します。
ここの $today を後述するループ処理内で更新していきます。

47行目の、
if($today<=date(‘Y-m-t’) && date(‘w’,strtotime($today))==$j)
で、 $today が今月末以内且つ、 $today の曜日と$jが一致していた場合に、
日を記入します。
$today<=date(‘Y-m-t’) で、来月の日を表示しないようにしています。
date(‘w’,strtotime($today))==$j で、月頭の開始曜日と日を合わせて表示しています。

47行目の条件が成立した場合は、67行目で $today を更新します。
$today = date(‘Y-m-d’,strtotime($today.’ +1 days’));

本来ならば、phpでやることでもないこともいろいろやっちゃってますが、まあphpでもできますよということで・・・

ということで、無事カレンダーを表示できました。
以上、お疲れさまでした!