Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -urN Calendar-Japanese-Holiday-0.04/lib/Calendar/Japanese/Holiday.pm Calendar-Japanese-Holiday-0.05/lib/Calendar/Japanese/Holiday.pm
- --- Calendar-Japanese-Holiday-0.04/lib/Calendar/Japanese/Holiday.pm 2015-01-06 21:16:19.000000000 +0900
- +++ Calendar-Japanese-Holiday-0.05/lib/Calendar/Japanese/Holiday.pm 2019-01-16 18:58:24.355684960 +0900
- @@ -13,7 +13,7 @@
- our @EXPORT = qw(getHolidays isHoliday);
- -our $VERSION = '0.04';
- +our $VERSION = '0.05';
- our $FurikaeStr = '振替';
- @@ -156,6 +156,8 @@
- 198902 => {24 => '昭和天皇の大喪の礼'},
- 199011 => {12 => '即位礼正殿の儀'},
- 199306 => { 9 => '皇太子徳仁親王の結婚の儀'},
- + 201905 => { 1 => '天皇の即位'},
- + 201910 => {22 => '即位の礼正殿の儀'},
- );
- my @daysInMonth = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
- @@ -328,8 +330,40 @@
- # 国民の休日
- if ($year >= 1986) {
- + # 月末日前と翌月月初の祝日が平日を挟んで国民の祝日になるケースに対応
- + my @added = ();
- + my $last_day = days_in_month($year, $mon);
- +
- + if ($holidays{$last_day - 1}) {
- +
- + my($next_year, $next_month) =
- + $mon == 12 ? ($year + 1, 1) : ($year, $mon + 1);
- +
- + if (isHoliday($next_year, $next_month, 1)) {
- + my $trailed = $last_day + 1;
- + push @added, $trailed;
- + $holidays{$trailed} = 1;
- + }
- + }
- +
- + # 2日と前月末日の祝日が平日を挟んで国民の祝日になるケース
- + if ($holidays{2}) {
- +
- + my($prev_year, $prev_month) =
- + $mon == 1 ? ($year - 1, 12) : ($year, $mon - 1);
- +
- + my $prev_last_day = days_in_month($prev_year, $prev_month);
- +
- + if (isHoliday($prev_year, $prev_month, $prev_last_day)) {
- + my $led = 0;
- + push @added, $led;
- + $holidays{$led} = 1;
- + }
- + }
- +
- # 祝日に挟まれた平日を探す (祝日A - 平日B - 祝日C)
- while (my ($day, $name) = each %holidays) {
- + next if $day < 1 || $day >= $last_day;
- if ( exists $holidays{$day + 2} &&
- !exists $holidays{$day + 1}) {
- my $wday = (localtime(timelocal(0, 0, 0,
- @@ -342,6 +376,22 @@
- $holidays{$day + 1} = '国民の休日';
- }
- + if (exists $holidays{$day - 2} &&
- + !exists $holidays{$day - 1}) {
- + my $wday = (localtime(timelocal(0, 0, 0,
- + $day, $mon - 1, $year)))[6];
- + # 祝日Cの時は平日Bはただの振り替え休日
- + next if $wday == 2;
- +
- + # 平日Bが日曜の場合も国民の休日とはならない
- + next if $wday == 1;
- +
- + $holidays{$day - 1} = '国民の休日';
- + }
- + }
- +
- + if (@added) {
- + delete $holidays{$_} for @added;
- }
- }
- diff -urN Calendar-Japanese-Holiday-0.04/t/Calendar-Japanese-Holiday.t Calendar-Japanese-Holiday-0.05/t/Calendar-Japanese-Holiday.t
- --- Calendar-Japanese-Holiday-0.04/t/Calendar-Japanese-Holiday.t 2015-01-06 21:51:15.000000000 +0900
- +++ Calendar-Japanese-Holiday-0.05/t/Calendar-Japanese-Holiday.t 2019-01-16 18:39:15.790670305 +0900
- @@ -2,7 +2,7 @@
- use utf8;
- -use Test::More tests => 60;
- +use Test::More tests => 64;
- BEGIN { use_ok('Calendar::Japanese::Holiday') };
- #########################
- @@ -244,6 +244,22 @@
- ok(checkHoliday(1989, 1989, 2, 24, '昭和天皇の大喪の礼'), 'Exceptional');
- ok(checkHoliday(1990, 1990,11, 12, '即位礼正殿の儀'), 'Exceptional');
- ok(checkHoliday(1993, 1993, 6, 9, '皇太子徳仁親王の結婚の儀'), 'Exceptional');
- +ok(checkHoliday(2019, 2019, 5, 1, '天皇の即位'), 'Exceptional');
- +ok(checkHoliday(2019, 2019,10, 22, '即位の礼正殿の儀'), 'Exceptional');
- +
- +# 2019年天皇の即位前後の平日は皇室慶弔行事と祝日に挟まれた国民の休日
- +ok(cmpHash(getHolidays(2019, 4, 1),
- + {29 => '昭和の日',
- + 30 => '国民の休日'}),
- + "getHolidays - Kokumin-no-hi in April (2019)");
- +ok(cmpHash(getHolidays(2019, 5, 1),
- + {1 => '天皇の即位',
- + 2 => '国民の休日',
- + 3 => '憲法記念日',
- + 4 => 'みどりの日',
- + 5 => 'こどもの日',
- + 6 => '振替'}),
- + "getHolidays - Kokumin-no-hi in May (2019)");
- ok(checkHoliday( $ST, 2015, 8, 11, ''), 'Yama(-2015)');
- ok(checkHoliday(2016, $ED, 8, 11, '山の日'), 'Yama(2016-2020)');
Add Comment
Please, Sign In to add comment