Skip to content

Instantly share code, notes, and snippets.

@sola-msr
Last active July 17, 2018 01:24
Show Gist options
  • Save sola-msr/d3911030fe47563e949d0085d9d3a1d6 to your computer and use it in GitHub Desktop.
Save sola-msr/d3911030fe47563e949d0085d9d3a1d6 to your computer and use it in GitHub Desktop.
【PHP】日本の祝日を扱うときは「Yasumi」を使ってみてはどうですか ref: https://qiita.com/sola-msr/items/7901835b3bfe145de033
composer require azuyalabs/yasumi
use \Yasumi\Yasumi;
$holidays = Yasumi::create('Japan', '2018', 'ja_JP');
foreach($holidays as $holiday) {
echo $holiday . ':' . $holiday->getName() . PHP_EOL;
}
Psy Shell v0.9.6 (PHP 7.2.5-1+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> use \Yasumi\Yasumi
>>> $holidays = Yasumi::create('Japan', '2018', 'ja_JP');
=> Yasumi\Provider\Japan {#2883}
>>> foreach($holidays as $holiday){ echo $holiday . ':' . $holiday->getName() . PHP_EOL; }
2018-01-01:元日
2018-01-08:成人の日
2018-02-11:建国記念の日
2018-02-12:振替休日 (建国記念の日)
2018-03-21:春分の日
2018-04-29:昭和の日
2018-04-30:振替休日 (昭和の日)
2018-05-03:憲法記念日
2018-05-04:みどりの日
2018-05-05:こどもの日
2018-07-16:海の日
2018-08-11:山の日
2018-09-17:敬老の日
2018-09-23:秋分の日
2018-09-24:振替休日 (秋分の日)
2018-10-08:体育の日
2018-11-03:文化の日
2018-11-23:勤労感謝の日
2018-12-23:天皇誕生日
2018-12-24:振替休日 (天皇誕生日)
>>>
use \Yasumi\Yasumi;
$holidays = Yasumi::create('Japan', '2018', 'ja_JP');
$holidaysInBetweenDays = $holidays->between(
\DateTime::createFromFormat('m/d/Y', '07/01/2018'),
\DateTime::createFromFormat('m/d/Y', '08/01/2018')
);
foreach ($holidaysInBetweenDays as $holiday) {
echo $holiday . ':' . $holiday->getName() . PHP_EOL;
}
Psy Shell v0.9.6 (PHP 7.2.5-1+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> use \Yasumi\Yasumi
>>> $holidays = Yasumi::create('Japan', '2018', 'ja_JP');
=> Yasumi\Provider\Japan {#2883}
>>> $holidaysInBetweenDays = $holidays->between(\DateTime::createFromFormat('m/d/Y', '07/01/2018'),\DateTime::createFromFormat('m/d/Y', '08/01/2018'));
=> Yasumi\Filters\BetweenFilter {#2913
innerIterator: ArrayIterator {#2912
+"newYearsDay": Yasumi\Holiday @1514732400 {#2882
date: 2018-01-01 00:00:00.0 Asia/Tokyo (+09:00),
},
+"comingOfAgeDay": Yasumi\Holiday @1515337200 {#2876
date: 2018-01-08 00:00:00.0 Asia/Tokyo (+09:00),
},
+"nationalFoundationDay": Yasumi\Holiday @1518274800 {#2881
date: 2018-02-11 00:00:00.0 Asia/Tokyo (+09:00),
},
+"substituteHoliday:nationalFoundationDay": Yasumi\Holiday @1518361200 {#2892
date: 2018-02-12 00:00:00.0 Asia/Tokyo (+09:00),
},
+"vernalEquinoxDay": Yasumi\Holiday @1521558000 {#2874
date: 2018-03-21 00:00:00.0 Asia/Tokyo (+09:00),
},
+"showaDay": Yasumi\Holiday @1524927600 {#2880
date: 2018-04-29 00:00:00.0 Asia/Tokyo (+09:00),
},
+"substituteHoliday:showaDay": Yasumi\Holiday @1525014000 {#2893
date: 2018-04-30 00:00:00.0 Asia/Tokyo (+09:00),
},
+"constitutionMemorialDay": Yasumi\Holiday @1525273200 {#2879
date: 2018-05-03 00:00:00.0 Asia/Tokyo (+09:00),
},
+"greeneryDay": Yasumi\Holiday @1525359600 {#2887
date: 2018-05-04 00:00:00.0 Asia/Tokyo (+09:00),
},
+"childrensDay": Yasumi\Holiday @1525446000 {#2878
date: 2018-05-05 00:00:00.0 Asia/Tokyo (+09:00),
},
+"marineDay": Yasumi\Holiday @1531666800 {#2888
date: 2018-07-16 00:00:00.0 Asia/Tokyo (+09:00),
},
+"mountainDay": Yasumi\Holiday @1533913200 {#2877
date: 2018-08-11 00:00:00.0 Asia/Tokyo (+09:00),
},
+"respectfortheAgedDay": Yasumi\Holiday @1537110000 {#2889
date: 2018-09-17 00:00:00.0 Asia/Tokyo (+09:00),
},
+"autumnalEquinoxDay": Yasumi\Holiday @1537628400 {#2884
date: 2018-09-23 00:00:00.0 Asia/Tokyo (+09:00),
},
+"substituteHoliday:autumnalEquinoxDay": Yasumi\Holiday @1537714800 {#2891
date: 2018-09-24 00:00:00.0 Asia/Tokyo (+09:00),
},
+"healthandSportsDay": Yasumi\Holiday @1538924400 {#2890
date: 2018-10-08 00:00:00.0 Asia/Tokyo (+09:00),
},
+"cultureDay": Yasumi\Holiday @1541170800 {#2871
date: 2018-11-03 00:00:00.0 Asia/Tokyo (+09:00),
},
+"laborThanksgivingDay": Yasumi\Holiday @1542898800 {#2869
date: 2018-11-23 00:00:00.0 Asia/Tokyo (+09:00),
},
+"emperorsBirthday": Yasumi\Holiday @1545490800 {#2886
date: 2018-12-23 00:00:00.0 Asia/Tokyo (+09:00),
},
+"substituteHoliday:emperorsBirthday": Yasumi\Holiday @1545577200 {#2895
date: 2018-12-24 00:00:00.0 Asia/Tokyo (+09:00),
},
},
}
>>> foreach ($holidaysInBetweenDays as $holiday) { echo $holiday . ':' . $holiday->getName() . PHP_EOL; }
2018-07-16:海の日
>>>
use Yasumi\Yasumi;
use Carbon\Carbon;
$startDate = new Carbon('2018-05-01');
$endDate = new Carbon('2018-06-01');
// 土日を除く平日を取得
$days = (int)$startDate->diffInDaysFiltered(
function (Carbon $date) {
return $date->isWeekday();
}, $endDate
);
// 祝日を取得
$holidays = Yasumi::create('Japan', '2018', 'ja_JP');
$holidaysInBetweenDays = $holidays->between(
\DateTime::createFromFormat('m/d/Y', $startDate->format('m/d/Y')),
\DateTime::createFromFormat('m/d/Y', $endDate->format('m/d/Y'))
);
$numberOfHoliday = 0;
foreach ($holidaysInBetweenDays as $holiday) {
if ((new Carbon($holiday))->isWeekend() === false) {
$numberOfHoliday++;
}
}
// さらに祝日の数を引いた平日の日数を取得
$numberOfDay = $days - $numberOfHoliday;
// 出力
var_dump($numberOfDay);
/*
int(21)
*/
use Yasumi\Yasumi;
use Carbon\Carbon;
$startDate = new Carbon('2018-05-01');
$endDate = new Carbon('2018-06-01');
// 土日を取得
$weekends = (int)$startDate->diffInDaysFiltered(
function (Carbon $date) {
return $date->isWeekend();
}, $endDate
);
// 祝日を取得
$holidays = Yasumi::create('Japan', '2018', 'ja_JP');
$holidaysInBetweenDays = $holidays->between(
\DateTime::createFromFormat('m/d/Y', $startDate->format('m/d/Y')),
\DateTime::createFromFormat('m/d/Y', $endDate->format('m/d/Y'))
);
$numberOfHoliday = 0;
foreach ($holidaysInBetweenDays as $holiday) {
if ((new Carbon($holiday))->isWeekend() === false) {
$numberOfHoliday++;
}
}
// 土日の日数に祝日の数を足した日数
$numberOfDay = $weekends + $numberOfHoliday;
// 出力
var_dump($numberOfDay);
/*
int(10)
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment