PHPの究極シンプルなカレンダー関数

WEBアプリなどで、ちょっとした時にシンプルなカレンダーを出力したい時があります。

TABLEタグでの出力になりますが、曜日を色分けしたかったり、本日を装飾したいなど、カスタマイズ項目が多くて、なかなか自分好みの関数がありません。

というわけで、可能な限りシンプルで最低限のテーブルタグで構成されるカレンダー関数です。できるだけ簡単に拡張できるように作ってみました。

スポンサーリンク

使い方は簡単で、引数なしで echo calendar(); で今月のカレンダーを表示します。

土曜日、日曜日、および本日のセルには、それぞれCSSクラスがつくので、デザインはCSSで行ないます。

引数は2つあり、$dateには表示させたい月をUNIXタイムで指定します。$dataは配列で、キーと同値の日が存在したら、その値が日付の後にspanタグで出力されます。例:$data[10] = ’10日だよ’; で、10日のtdは

<td>10<span>10日だよ</span></td>
となります。

calendar_cell関数でCSSクラスを追加しています。祭日対応などの機能追加も比較的簡単に実装できると思います。

サンプル 今月のカレンダー

     12
3456789
10111213141516
17181920212223
24252627282930

スタイルシート

<style type="text/css">
#content .calendar th,.calendar td{
    border-right: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
    text-align: center;
}
#content .calendar th{
    color: white;
    background-color: #aaa;
}
#content .calendar td.today{
    border: 2px solid red;
}
#content .calendar td.sun{
    background-color: #fcc;
}
#content .calendar td.sat{
    background-color: #ccf;
}
</style>

PHP

function calendar( $date = '' , $data = '' ){
    if ( $date == '' ) $date = time();
    
    for ($day = 1; $day <= date('t', $date); $day++) {
        if ( $day == 1 ) {
            $out .= '<table class="calendar">';
            $out .= '<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr>';
            $out .= '<tr>';
            $cell = date('w',mktime(0,0,0,date('n',$date),1,date('Y',$date)));
            for ($i = 0; $i < $cell; $i++) {
                $out .= calendar_cell(' ',$date,$day);
            }
        } elseif ($cell % 7 == 0) {
            $out .= '</tr>';
            $out .= '<tr>';
        }
        if ($data[$day]){
            $daystr = "{$day}<span>{$data[$day]}</span>";
        } else {
            $daystr = $day;
        }
        $out .= calendar_cell($daystr,$date,$day,$cell);
        $cell++;
    }
    while ($cell % 7 !== 0) {
        $out .= calendar_cell(' ',$date,$day);
        $cell++;
    }
    $out .= '</tr>';
    $out .= '</table>';
    
    return $out;
}

function calendar_cell( $str , $date = '' , $day = '' , $cell = -1 ){
    if ( date('Ym',$date) == date('Ym') && $day == date('j') ){
        $class[] = 'today';
    }
    if ($cell == 0 || $cell % 7 == 0){
        $class[] = 'sun';
    } elseif ($cell % 7 === 6){
        $class[] = 'sat';
    }
    if (count($class)){
        $class = ' class="'.implode(' ',$class).'"';
    }
    
    $out = "<td{$class}>{$str}</td>";
    return $out;
}

 

 

スポンサーリンク