Laravel10で日本の祝日を簡単に扱う方法(Carbonもあるよ)

こんにちは!とびろぐ管理人のとびうおです!

今回は、Laravel10で、yasumiというパッケージとcarbonを使用して簡単に日本の祝日を扱う方法について紹介していきます!

yasumiを利用する

GitHub - azuyalabs/yasumi: The easy PHP Library for calculating holidays
The easy PHP Library for calculating holidays. Contribute to azuyalabs/yasumi development by creating an account on GitHub.

世の中には、こんな便利なパッケージが…!

ということで、実際にこのパッケージを使用していきましょう。

composer require azuyalabs/yasumi

と打って、入れていきます!

Laravel10で日本の祝日を簡単に扱う方法(Carbonもあるよ)

入れ方がわからない場合

上記のコマンドで入らない場合は、以下のコマンドも試してみてください!

./vendor/bin/sail composer require azuyalabs/yasumi

参考記事↓↓

実際に使ってみる

use \Yasumi\Yasumi;

$holidays = Yasumi::create('Japan', '2024   ', 'ja_JP');
dd($holidays);

このようにしてみると、

Laravel10で日本の祝日を簡単に扱う方法(Carbonもあるよ)

このように表示されますね。

とびうお
とびうお

ちゃんと日本の休日が!

日本語で表示したい!

日本語で表示したい場合は、

getName()

で取得できます。

$holidays = Yasumi::create('Japan', '2024', 'ja_JP');

        foreach($holidays as $holiday) {
            echo $holiday->getName().($holiday).'<br/>';
        }
とびうお
とびうお

振替え休日までしっかりとカバーされていますね!
すごい!

Carbonと一緒にいい感じに作ってみる

続いて、Carbonと並行して使ってみましょう。

その祝日が週末かどうかを判定する

祝日に祝日が被っているかどうかというのを調べるには以下のようなコードを書けばOKですね!

$holidays = Yasumi::create('Japan', 2024, 'ja_JP');

        foreach ($holidays as $holiday) {
            $date = Carbon::createFromTimestamp($holiday->getTimestamp());
            $isWeekend = $date->isWeekend() ? 'は週末です。' : 'は週末ではありません。';
            echo $holiday->getName() . ' (' . $date->toDateString() . ') ' . $isWeekend . '<br/>';
        }
とびうお
とびうお

もし、1日ずれている!という場合は、
laravelのconfig/app.phpのtimezoneが
Asia/Tokyoになっているか確認しましょう!

Laravel10で日本の祝日を簡単に扱う方法(Carbonもあるよ)

休みかどうかを判別するメソッド

続いて、指定された日付が祝日・土曜・日曜のいずれかに該当するかどうかというのを調べるメソッドを作成します。

use Carbon\Carbon;
use Yasumi\Yasumi;

public function checkHolidayOrWeekend($year, $month, $day)
{
    $date = Carbon::create($year, $month, $day, 0, 0, 0, 'Asia/Tokyo');

    // 土曜日または日曜日かどうかをチェック
    if ($date->isWeekend()) {
        return '指定された日は週末で休みです。';
    }

    // Yasumiを使って祝日を取得
    $holidays = Yasumi::create('Japan', $year, 'ja_JP');

    foreach ($holidays as $holiday) {
        if ($date->isSameDay(Carbon::createFromTimestamp($holiday->getTimestamp(), 'Asia/Tokyo'))) {
            return $holiday->getName() . 'は祝日で休みです。';
        }
    }

    return '指定された日は休みではありません。';
}

このコードを以下のコードでテストし

ます。

    $datesToCheck = [
        '2024-01-01', // 元日(祝日)
        '2024-05-05', // こどもの日(祝日)
        '2024-08-12', // 振替休日
        '2024-08-10', // 土曜日(週末)
        '2024-08-11', // 日曜日(週末)
        '2024-08-13', // 平日
    ];

    foreach ($datesToCheck as $dateString) {
        [$year, $month, $day] = explode('-', $dateString);
        $result = $this->checkHolidayOrWeekend($year, $month, $day);
        echo "{$dateString}: {$result}<br/>";
    }
Laravel10で日本の祝日を簡単に扱う方法(Carbonもあるよ)
とびうお
とびうお

ちゃんと動いたね!

まとめ

このように簡単に日本の祝日をLaravel 10で扱うことができました!

振り返え休日までもカバーされていて、大変便利ですね!

このライブラリとCarbonを使って、その日が世の中的に休みなのかどうかというのを判別するメソッドを作ると利便性がぐぐっと向上する場面があるかも……!?

とびうお
とびうお

よいLaravelライフを!

他の記事もあるよ

トビログではLaravelの記事を色々公開しているので、ぜひみてみてくださいね!

Laravel
「Laravel」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました