勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPで簡単にカレンダーを生成できるライブラリ「PHP Calendar」の利用方法

  PHP

PHPでカレンダーを描写したいということがたまにある。今までバニラPHPで書いていたが「月曜日始まり or 日曜日始まり」「1週目と最終週の空カラムの計算」等が面倒。ライブラリで何とかならないか調べたところ「PHP Calendar(benhall14 / php-calendar)」が良さそう。以下に実装方法をメモ。

 

やりたいこと

  • PHPでカレンダーをtableタグで描写したい
  • 年月を指定すると当該月のカレンダーを表示
  • CSSに関しては未設定にしたい
  • 日本語表記
  • 月曜日始まりにしたい

 

PHP Calendar(benhall14 / php-calendar)

公式サイト

https://conobe.co.uk/projects/php-calendar/

GitHub

https://github.com/benhall14/php-calendar

 

インストール

composerでインストールする場合

サーバにSSH接続し以下コマンドでインストールする。

composer require benhall14/php-calendar

手動でインストールする場合

公式サイトからCalendar.phpをダウンロードし、適当なディレクトリにアップロードする。今回はこちらの方法を取った。

 

利用方法

ソースコード

<?php
require 'src/phpCalendar/Calendar.php';

use benhall14\phpCalendar\Calendar as Calendar;

$calendar = new Calendar;
$calendar->stylesheet(false);

//曜日の日本語化
$calendar->setDays([
    'sunday' => [
        'initials' => '日',
        'full' => '日',
    ],
    'monday' => [
        'initials' => '月',
        'full' => '月',
    ],
    'tuesday' => [
        'initials' => '火',
        'full' => '火',
    ],
    'wednesday' => [
        'initials' => '水',
        'full' => '水',
    ],
    'thursday' => [
        'initials' => '木',
        'full' => '木',
    ],
    'friday' => [
        'initials' => '金',
        'full' => '金',
    ],
    'saturday' => [
        'initials' => '土',
        'full' => '土',
    ],
]);

//月の日本語化
$calendar->setMonths([
    'january' => '1月',
    'february' => '2月',
    'march' => '3月',
    'april' => '4月',
    'may' => '5月',
    'june' => '6月',
    'july' => '7月',
    'august' => '8月',
    'september' => '9月',
    'october' => '10月',
    'november' => '11月',
    'december' => '12月'
]);


//月曜日始まりに設定
$calendar->useMondayStartingDate();
$calendar->display(date('Y-m-d'));

「$calendar->display(date('Y-m-d'));」の部分で表示するカレンダーの年月を指定できる。2024年12月を指定したい場合は「date('2024-12-01')」になる。

実運用の際は「翌月」「前月」みたいなリンクを設置し「?ym=2024-12-01」等のGETパラメータを付与するような形になる。

デフォルトのCSSを読み込ませない

カレンダーを表示させるとデフォルトのCSSがインラインで指定される。Calendar.phpの以下部分をコメントアウトすることでCSSを読み込まなくなる。

public function display($date = false, $color = false)
{
    #以下をコメントアウト
    #echo $this->stylesheet();
    echo $this->draw($date, $color);
}

年月の表示を「M月 YYYY」から「YYYY年M月に変更」

Calendar.phpを以下の通り変更する。

#変更前
$calendar .= $this->months[strtolower($date->format('F'))] . ' ' . $date->format('Y');

#変更後
$calendar .= $date->format('Y') . '年' . $this->months[strtolower($date->format('F'))];

 

所感

composer無しでも導入可&ファイル1枚のライブラリなので気軽に使いやすい。PHPでカレンダーの描写するということはたまにしかないけど、今後あれば使っていきたい。

尚、曜日や年月部分を英語表記するということはあまりなさそうなので、$calendar->setDaysで指定するよりもライブラリを直接変更した方が後で使いまわしやすい上、カレンダー描写側のソースコード記述量も減りそう。

 - PHP

  関連記事

PHPにて「hashids(Sqids)」ライブラリで数値からユニークなランダム英数字のIDに変換する方法

PHPにてユーザID等を推測されないよう数値のIDからユニークなランダム英数字の ...

PHPのHTTPクライアント用ライブラリ「Guzzle」の利用方法

以前に「Requests for PHP」を試したが、似たようなライブラリで「G ...

PHPで配列を確認する際にvar_dumpよりも見やすくなるdBug.phpの利用方法

PHPで配列を確認する際、大抵var_dumpで出力させているがこれが見づらい。 ...

PHPでJavaScriptを圧縮するライブラリ「JShrink」の利用方法

サイト内でJavaScriptを用いる場合、外部のライブラリやプラグインだと圧縮 ...

PHPで住所や名前のテキストをランダム生成するライブラリFakerPHPの使い方

PHPでランダムなデータを生成したい際に値段や点数等の数値やパスワード等のランダ ...