ユアスク by みんなシステムズ

MENU

【実装例あり】Laravelで祝日を簡単に判定する – isHolidayメソッドを活用しよう!

2023/03/24

こんにちは!今回は、Laravelで祝日を簡単に判定する方法について解説します。特に、isHolidayというメソッドを使って祝日を判定する方法に焦点を当てます。

Laravelでは、carbonという日付操作ライブラリがデフォルトで導入されています。このcarbonを使って、祝日判定をするためのisHolidayメソッドを独自に追加しましょう。

1. インストール

はじめに、祝日情報を提供する外部パッケージをインストールします。今回は、yasumiというライブラリを利用します。

composer require azuyalabs/yasumi

2. CarbonにisHolidayメソッドを追加

次に、carbonisHolidayメソッドを追加します。app/Providers/AppServiceProvider.phpを開き、以下のように編集します。

use Carbon\Carbon;
use Yasumi\Yasumi;

public function boot()
{
    Carbon::macro('isHoliday', function () {
        $holidays = Yasumi::create('Japan', $this->year);
        return $holidays->isHoliday($this->toDateTime());
    });
}

このコードにより、CarbonインスタンスにisHolidayメソッドが追加されます。Yasumi::createメソッドを使って、祝日情報を取得し、isHolidayメソッドで祝日かどうかを判定しています。

3. 使用例

isHolidayメソッドを使って祝日を判定してみましょう。

use Carbon\Carbon;

$date = Carbon::parse('2022-12-31');
$isHoliday = $date->isHoliday(); // false

$date = Carbon::parse('2023-01-01');
$isHoliday = $date->isHoliday(); // true 元旦

$date = Carbon::parse('2023-01-02');
$isHoliday = $date->isHoliday(); // true 振替休日

この例では、Carbon::parseメソッドで日付をパースし、isHolidayメソッドで祝日かどうかを判定しています。結果として、2022年12月31日は祝日ではないためfalseが、2023年1月1日は祝日であるためtrueが、1月2日は振替休日であるためtrueが返ります。

まとめ

この記事では、Laravelで祝日を簡単に判定する方法を紹介しました。carbonisHolidayメソッドを追加することで、簡単に祝日の判定ができるようになります。yasumiライブラリを利用することで、国や地域ごとの祝日情報にも対応できるので、柔軟な祝日判定が可能です。

今回紹介した方法は、Laravelプロジェクトで日付操作を行う際に非常に便利です。例えば、祝日を除外した営業日の計算や、カレンダー機能の実装に活用できます。

また、isHolidayメソッドはカスタマイズが容易であり、独自の祝日や休日を追加することも可能です。これにより、企業独自の休日ルールにも対応できます。

use Carbon\Carbon;
use Yasumi\Yasumi;

public function boot()
{
    Carbon::macro('isHoliday', function () {
        $holidays = Yasumi::create('Japan', $this->year);

        // 例: 独自の休日を追加
        $holidays->addHoliday(new \Yasumi\Holiday(
            'custom_holiday',
            ['en_US' => 'Custom Holiday', 'ja_JP' => '独自の休日'],
            $this->copy()->month(3)->day(24),
            'ja_JP',
            \Yasumi\Holiday::TYPE_OTHER
        ));

        return $holidays->isHoliday($this->toDateTime());
    });
}

上記の例では、3月24日を独自の休日として追加しています。このようにisHolidayメソッドをカスタマイズすることで、アプリケーションに合わせた休日判定が可能となります。

この記事で紹介したisHolidayメソッドをぜひ、Laravelアプリケーション開発で活用してみてください。祝日判定が簡単に行えることで、日付操作に関するコードの可読性や保守性が向上し、開発効率が向上するでしょう。