r28/holiday-jp

日本的节假日判断 / 判断日本节假日时间

v1.2.2 2020-12-02 09:14 UTC

This package is auto-updated.

Last update: 2024-09-29 04:08:09 UTC


README

Build Status

判断日本节假日的库。日本节假日判断库

给定日期后

  • 如果是节假日: 节假日名称
  • 如果不是节假日: false

返回。

需求

HolidayJp 运行需要以下条件

  • PHP > 7.1
  • composer
  • r28/AstroTime
  • laktak/hjson

安装

使用 composer

$ composer require r28/holiday-jp

用法

<?php
require_once path_to_vendor.'/vendor/autoload.php';
use r28\HolidayJp\HolidayJp;
  • 指定日期后创建实例,然后进行节假日判断 [holidayName()]

    $date = '2019-05-01';
    $holiday = new HolidayJp($date);
    $holiday_name = $holiday->holidayName();
    echo $holiday_name.PHP_EOL;
    # 天皇即位の日
  • 创建实例后,指定日期进行节假日判断

    $date = '2019-05-03';
    $time = new AstroTime($date, 'Asia/Tokyo', false);
    $holiday = new HolidayJp();
    $holiday_name = $holiday->holidayName($time);
    echo $holiday_name.PHP_EOL;
    # 憲法記念日
  • 使用静态方法,通过日期字符串指定进行节假日判断 [holidayNameFromDate()]

    $holiday_name = HolidayJp::holidayNameFromDate('2019-05-04');
    echo $holiday_name.PHP_EOL;
    # みどりの日
  • 使用静态方法,通过 Unix 时间戳指定进行节假日判断 [holidayNameFromTimestamp()]

    $holiday_name = HolidayJp::holidayNameFromTimestamp(1556982000); # 2019/05/05
    echo $holiday_name.PHP_EOL;
    # こどもの日
  • 使用静态方法,通过儒略日指定进行节假日判断 [holidayNameFromJulian()]

    $holiday_name = HolidayJp::holidayNameFromJulian(2458609.125);  # 2019/05/06
    echo $holiday_name.PHP_EOL;
    # 振替休日
  • 使用静态方法,通过年份指定获取一年内的节假日数组 [holidayNamesFromYear()]

    $holidays = HolidayJp::holidayNamesFromYear(2019, 'date_string', true);
    print_r($holidays);
    
    Array
    (
        [2019-01-01] => 元日
        [2019-01-14] => 成人の日
        [2019-02-11] => 建国記念の日
        ....
        [2019-11-03] => 文化の日
        [2019-11-04] => 振替休日
        [2019-11-23] => 勤労感謝の日
    )
    • 第一个参数 : 年(int)
    • 第二个参数 : 返回数组中的 Key 的格式
      • date_string : Y-m-d (string)
      • date_slash : Y/m/d
      • date_short : Ymd
      • timestamp : Unix 时间戳 (integer)
      • julian : 儒略日 (float)
    • 第三个参数: true = 返回指定期间内的节假日,false = 返回指定期间的全部(非节假日的情况的 value 为 false)
  • 使用静态方法,通过年月指定获取一个月的节假日数组 [holidayNamesFromYearMonth()]

    $holidays = HolidayJp::holidayNamesFromYearMonth(2019, 5, 'date_string', true);
    print_r($holidays);
    
    Array
    (
        [2019-05-01] => 天皇即位の日
        [2019-05-02] => 国民の休日
        [2019-05-03] => 憲法記念日
        [2019-05-04] => みどりの日
        [2019-05-05] => こどもの日
        [2019-05-06] => 振替休日
    )
    • 第一个参数 : 年(int)
    • 第二个参数 : 月(integer)
    • 第二个参数以后与 holidayNamesFromYear() 的第二个参数以后相同
  • 使用静态方法,通过开始日期和结束日期的日期字符串指定获取指定期间的节假日数组 [iteratePeriodsFromDate() ]

    $holidays = HolidayJp::itteratePeriodsFromDate('2019-01-01', '2019-04-01', 'date_string', true, false);
    print_r($holidays);
    
    Array
    (
        [2019-01-01] => 元日
        [2019-01-14] => 成人の日
        [2019-02-11] => 建国記念の日
        [2019-03-21] => 春分の日
    )
    • 第一个参数 : 开始日期(string)
    • 第二个参数 : 结束日期(string)
    • 第二个参数 : 返回数组中的 Key 的格式
      • date_string : Y-m-d (string)
      • date_slash : Y/m/d
      • date_short : Ymd
      • timestamp : Unix 时间戳 (integer)
      • julian : 儒略日 (float)
    • 第三个参数: true = 返回指定期间内的节假日,false = 返回指定期间的全部(非节假日的情况的 value 为 false)
    • 第四个参数: true = 返回的数组中的 Value 使用节假日名称,而不是 AstroTime 对象的数组
      • Array( [日期] => Array( [name]=><祝日名称>, [time]=> ), .. )
    $holidays = HolidayJp::itteratePeriodsFromDate('2019-01-01', '2019-04-01', 'date_string', true, true);
    print_r($holidays);
    
    Array
    (
        [2019-01-01] => Array
            (
                [name] => 元日
                [time] => r28\AstroTime\AstroTime Object
                    (
                        [timezoneName] => Asia/Tokyo
                        [local] => Cake\Chronos\Chronos Object
                            (
                                [hasFixedNow] =>
                                [time] => 2019-01-01 00:00:00.000000
                                [timezone] => Asia/Tokyo
                            )
    
                        [utc] => Cake\Chronos\Chronos Object
                            (
                                [hasFixedNow] =>
                                [time] => 2018-12-31 15:00:00.000000
                                [timezone] => UTC
                            )
    
                        [timestamp] => 1546268400
                        [calendar_type] => gregorian
                        [jd] => 2458484.125
                        [mjd] => 58483.625
                        [jc] => 0.18998288843258
    【以下略】
    )
  • 使用静态方法,通过目录、文件名和期间指定以 CSV 格式输出该期间的每日节假日名称 [exportCsvForPeriodsFromDate() ]

    define('EXPORT_DIR', '/PATH/TO/exports/');
    HolidayJp::exportCsvForPeriodsFromDate(EXPORT_DIR, 'holidays.csv', '2018-01-01', '2031-12-31');
    $ head /PATH/TO/exports/holidays.csv
    
    ---ここから---
    datetime,timestamp,name
    "2018-01-01",1514732400,元日
    "2018-01-02",1514818800,
    "2018-01-03",1514905200,
    "2018-01-04",1514991600,
    "2018-01-05",1515078000,
    "2018-01-06",1515164400,
    "2018-01-07",1515250800,
    "2018-01-08",1515337200,成人の日
    "2018-01-09",1515423600,
    ---ここまで---
    • 第一个参数 : 输出目录(string)
    • 第二个参数 : 输出文件名(string)
    • 第三个参数 : 期间-开始年月日(string)
    • 第四个参数 : 期间-结束年月日(string)

支持的节假日

  • 已针对2019年“关于将天皇即位日及即位礼正殿之仪定为休息日的法律”进行适配
  • 已针对2020年“关于修正平成三十二年东京奥运会和东京残奥会特别措施法及部分修正平成三十一年世界杯特别措施法的法律(平成三十年法律第五十五号)”进行适配
  • 已针对“关于修改国民假日相关法律的法律(平成三十年法律第五十七号)”进行适配(体育之日→体育之日)
  • 已针对2021年“关于修正平成三十二年东京奥运会和东京残奥会特别措施法的法律”进行适配

节假日设置

节假日的设置是以 HJSON 文件的形式存储在 src/HolidayJp/settings/*.hjson 中。

  • Equinox.hjson 春分和秋分之日的计算常数
  • Happy_Mondays.hjson 根据“幸福星期一”制度规定的节假日
  • Specified_Moved.hjson 如2020年奥运会相关特别措施法那样,“仅在某年移至其他日期,前后不改变”的节假日
  • Stationaly_Holidays.hjson 除上述以外的通常节假日
  • Additional_Holidays.hjson 追加的固定休日(如夏季/年末年初假期等,设置年月日的时间段)

追加的固定休日

公司的夏季/年末年初假期或创立纪念日等,应将其设置为“Additional_Holidays.hjson”中的时间段(开始日~结束日, 'YYYY-MM-DD' 格式)和名称。但设置后,将优先于其他节假日或调休日。

【例】"2020-12-29" ~ "2021-01-03" を「冬期休暇」とした場合は、"2021-01-01"は「元日」でなく「冬期休暇」となる。

如果设置为空,则忽略。

Additional_Holidays.hjson 的设置示例

[
    {
        from_date: "2020-12-29"
        to_daet: "2021-01-03"
        name: "冬期休暇"
    }
    {
        from_date: "2021-08-10"
        to_date: "2021-08-16"
        name: "夏季休暇"
    }
]
これの編集スクリプトなどはそのうち...

更新日志

  • v1.2.2 : 2020/12/02 : 添加了追加固定休日设置
  • v1.2.1 : 2020/11/27 : 适配2021年奥运特别措施法修正(2021年7月~8月的节假日移至)