shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

PHPで祝日判定

2025-02-26 2025-02-26
カテゴリ: PHP

概要

祝日を判定したり列挙でき、

composerでインストールできるazuyalabs/yasumiというライブラリがある。

yasumiの公式サイトで2025年の休日を確認すると19個で、

内閣府が発表している休日の数と合致するので、正確さもありそう。

なのでこれをライブラリを使う。

準備

composerでyasumiをインストールために次のコマンドを実行。

composer require azuyalabs/yasumi

test.php

次のコードを実行すればおおまかにわかるはず。

<?php

use Yasumi\Holiday;

require_once "./vendor/autoload.php";

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

// 年間の祝日の数を表示(振替休日は含まない)。
echo $holidays->count() . PHP_EOL;

echo '==========' . PHP_EOL;

// 指定した年月日が祝日であるか判定。
if ($holidays->isHoliday(new DateTime('2025-2-11'))) {
    echo "休み" . PHP_EOL;
} else {
    echo "休みではない" . PHP_EOL;
}

echo '==========' . PHP_EOL;

// 祝日の年月日を一覧表示。
$count = 0;
foreach ($holidays->getHolidayDates() as $date) {
    echo ++$count . ' : ' . $date . PHP_EOL;
}

echo '==========' . PHP_EOL;

// 祝日の名称と年月日を一覧表示。
foreach ($holidays->getHolidayNames() as $name) {
    $holiday = $holidays->getHoliday($name);
    echo $holiday->getName() . ' : ' . $holiday . "\t\t" . $name . PHP_EOL;
}

echo '===========' . PHP_EOL;

// 下記4日分を祝日として追加。
// 12月30日
// 12月31日
// 1月2日
// 1月3日
class JapanCarendar extends Yasumi\Provider\Japan
{
    public function initialize(): void
    {
        parent::initialize(); // TODO: Change the autogenerated stub

        $this->addHoliday(new Holiday('yearEndHoliday30', ['ja' => '30日年末休暇'], new DateTime("{$this->year}-12-30"), 'ja_JP'));
        $this->addHoliday(new Holiday('yearEndHoliday31', ['ja' => '31日年末休暇'], new DateTime("{$this->year}-12-31"), 'ja_JP'));
        $this->addHoliday(new Holiday('newYearHoliday2', ['ja' => '2日年始休暇'], new DateTime("{$this->year}-01-02"), 'ja_JP'));
        $this->addHoliday(new Holiday('newYearHoliday3', ['ja' => '3日年始休暇'], new DateTime("{$this->year}-01-03"), 'ja_JP'));
    }
}

$customHolidays = Yasumi\Yasumi::create('JapanCarendar', 2025, 'ja_JP');
echo '===== 以下は休日追加後 =====' . PHP_EOL;

// 年間の祝日の数を表示(振替休日は含まない)。
echo $customHolidays->count() . PHP_EOL;

echo '==========' . PHP_EOL;

// 指定した年月日が祝日であるか判定。
if ($customHolidays->isHoliday(new DateTime('2025-2-11'))) {
    echo "休み" . PHP_EOL;
} else {
    echo "休みではない" . PHP_EOL;
}

echo '==========' . PHP_EOL;

// 祝日の年月日を一覧表示。
$count = 0;
foreach ($customHolidays->getHolidayDates() as $date) {
    echo ++$count . ' : ' . $date . PHP_EOL;
}

echo '==========' . PHP_EOL;

// 祝日の名称と年月日を一覧表示。
foreach ($customHolidays->getHolidayNames() as $name) {
    $holiday = $customHolidays->getHoliday($name);
//    echo $name . "\t";
    echo $holiday->getName() . ' : ' . $holiday . "\t\t" . $name . PHP_EOL;
}

実行結果

16
==========
休み
==========
1 : 2025-01-01
2 : 2025-01-13
3 : 2025-02-11
4 : 2025-02-23
5 : 2025-02-24
6 : 2025-03-20
7 : 2025-04-29
8 : 2025-05-03
9 : 2025-05-04
10 : 2025-05-05
11 : 2025-05-06
12 : 2025-07-21
13 : 2025-08-11
14 : 2025-09-15
15 : 2025-09-23
16 : 2025-10-13
17 : 2025-11-03
18 : 2025-11-23
19 : 2025-11-24
==========
元日 : 2025-01-01		newYearsDay
成人の日 : 2025-01-13		comingOfAgeDay
建国記念の日 : 2025-02-11		nationalFoundationDay
天皇誕生日 : 2025-02-23		emperorsBirthday
振替休日 (天皇誕生日) : 2025-02-24		substituteHoliday:emperorsBirthday
春分の日 : 2025-03-20		vernalEquinoxDay
昭和の日 : 2025-04-29		showaDay
憲法記念日 : 2025-05-03		constitutionMemorialDay
みどりの日 : 2025-05-04		greeneryDay
こどもの日 : 2025-05-05		childrensDay
振替休日 (みどりの日) : 2025-05-06		substituteHoliday:greeneryDay
海の日 : 2025-07-21		marineDay
山の日 : 2025-08-11		mountainDay
敬老の日 : 2025-09-15		respectfortheAgedDay
秋分の日 : 2025-09-23		autumnalEquinoxDay
スポーツの日 : 2025-10-13		sportsDay
文化の日 : 2025-11-03		cultureDay
勤労感謝の日 : 2025-11-23		laborThanksgivingDay
振替休日 (勤労感謝の日) : 2025-11-24		substituteHoliday:laborThanksgivingDay
===========
===== 以下は休日追加後 =====
20
==========
休み
==========
1 : 2025-01-01
2 : 2025-01-02
3 : 2025-01-03
4 : 2025-01-13
5 : 2025-02-11
6 : 2025-02-23
7 : 2025-02-24
8 : 2025-03-20
9 : 2025-04-29
10 : 2025-05-03
11 : 2025-05-04
12 : 2025-05-05
13 : 2025-05-06
14 : 2025-07-21
15 : 2025-08-11
16 : 2025-09-15
17 : 2025-09-23
18 : 2025-10-13
19 : 2025-11-03
20 : 2025-11-23
21 : 2025-11-24
22 : 2025-12-30
23 : 2025-12-31
==========
元日 : 2025-01-01		newYearsDay
2日年始休暇 : 2025-01-02		newYearHoliday2
3日年始休暇 : 2025-01-03		newYearHoliday3
成人の日 : 2025-01-13		comingOfAgeDay
建国記念の日 : 2025-02-11		nationalFoundationDay
天皇誕生日 : 2025-02-23		emperorsBirthday
振替休日 (天皇誕生日) : 2025-02-24		substituteHoliday:emperorsBirthday
春分の日 : 2025-03-20		vernalEquinoxDay
昭和の日 : 2025-04-29		showaDay
憲法記念日 : 2025-05-03		constitutionMemorialDay
みどりの日 : 2025-05-04		greeneryDay
こどもの日 : 2025-05-05		childrensDay
振替休日 (みどりの日) : 2025-05-06		substituteHoliday:greeneryDay
海の日 : 2025-07-21		marineDay
山の日 : 2025-08-11		mountainDay
敬老の日 : 2025-09-15		respectfortheAgedDay
秋分の日 : 2025-09-23		autumnalEquinoxDay
スポーツの日 : 2025-10-13		sportsDay
文化の日 : 2025-11-03		cultureDay
勤労感謝の日 : 2025-11-23		laborThanksgivingDay
振替休日 (勤労感謝の日) : 2025-11-24		substituteHoliday:laborThanksgivingDay
30日年末休暇 : 2025-12-30		yearEndHoliday30
31日年末休暇 : 2025-12-31		yearEndHoliday31
同一カテゴリの記事