PHP:phpで簡単なカレンダーを作成する方法

phpで現在の年月のカレンダーを表示するサンプルを作成しました。

WEBサイトを構築しているとカレンダーを表示したい場合があります。
営業日カレンダーイベントカレンダーなど、様々な箇所で利用されています。

ツールやライブラリーなど色々ありますが、それらを使用せずに
phpで簡単なカレンダーを作成した時の方法をメモします。


phpで簡単なカレンダーを作成

※テーブルで出力する場合の方法です。

PHP

「$year」「$month」に取得したいカレンダーの年月を指定します。
「$calendar」にカレンダーの情報を格納します。

<?php

// 現在の年月を取得
$year = date('Y');
$month = date('n');

// 月末日を取得
$last_day = date('j', mktime(0, 0, 0, $month + 1, 0, $year));

$calendar = array();
$j = 0;

// 月末日までループ
for ($i = 1; $i < $last_day + 1; $i++) {

    // 曜日を取得
    $week = date('w', mktime(0, 0, 0, $month, $i, $year));

    // 1日の場合
    if ($i == 1) {

        // 1日目の曜日までをループ
        for ($s = 1; $s <= $week; $s++) {

            // 前半に空文字をセット
            $calendar[$j]['day'] = '';
            $j++;

        }

    }

    // 配列に日付をセット
    $calendar[$j]['day'] = $i;
    $j++;

    // 月末日の場合
    if ($i == $last_day) {

        // 月末日から残りをループ
        for ($e = 1; $e <= 6 - $week; $e++) {

            // 後半に空文字をセット
            $calendar[$j]['day'] = '';
            $j++;

        }

    }

}

?>

HTML

「$calendar」をループさせ、カレンダーの値を出力します。

<?php echo $year; ?>年<?php echo $month; ?>月のカレンダー
<br>
<br>
<table>
    <tr>
        <th>日</th>
        <th>月</th>
        <th>火</th>
        <th>水</th>
        <th>木</th>
        <th>金</th>
        <th>土</th>
    </tr>

    <tr>
    <?php $cnt = 0; ?>
    <?php foreach ($calendar as $key => $value): ?>

        <td>
        <?php $cnt++; ?>
        <?php echo $value['day']; ?>
        </td>

    <?php if ($cnt == 7): ?>
    </tr>
    <tr>
    <?php $cnt = 0; ?>
    <?php endif; ?>

    <?php endforeach; ?>
    </tr>
</table>

CSS

見やすいように、スタイルを調整します。

<style type="text/css">
table {
    width: 100%;
}
table th {
    background: #EEEEEE;
}
table th,
table td {
    border: 1px solid #CCCCCC;
    text-align: center;
    padding: 5px;
}
</style>

下記のようにカレンダーが出力されます。

※下記は2014年7月のカレンダーを出力した場合です。

calendar


オリジナルで作成していた方がカレンダーにイベント情報を入れたり等の
カスタマイズがしやすいのでいいと思います。

また関数にしておくと使いやすいかもしれないです。