第何月曜日など、年によって日付が変わる祝日の日付をPHPで取得する関数を作ったので、メモ。
目的:各祝日で今年の日付のみ取得。(月は変わらないため)
対象祝日:対象となる祝日は下記4つ。
⇒成人の日,海の日,敬老の日,スポーツの日
.php
//今年の各祝日の日付を取得
$thisYear = date("Y");
//各祝日の日情報:m→月,t→週,w→曜日(0~6)の順
//各祝日の配列のキー:成人の日→0,海の日→1,敬老の日→2,スポーツの日→3
$changeHoliday = [
["m" => 1,"t" =>2,"w"=>1],//成人の日
["m" => 7,"t" =>3,"w"=>1],//海の日
["m" => 9,"t" =>3,"w"=>1],//敬老の日
["m" => 10,"t" =>2,"w"=>1]//スポーツの日
];
$changeHolidayData = [];
foreach ($changeHoliday as $key => $value){
//対象祝日の月の1日の曜日を取得
$timestamp = mktime(0, 0, 0, $changeHoliday[$key]["m"], 1, $thisYear);
$weekofone = date('w', $timestamp);
//差分 = 対象の曜日 - その月の1日の曜日
$dayDiff = $changeHoliday[$key]["w"] - $weekofone;
if ($dayDiff == 0){
$firstweek = 1;
$returnDay = $firstweek + 7*($changeHoliday[$key]["t"]-1);
}
if ($dayDiff > 0){
$firstweek = 1 + $dayDiff;
$returnDay = $firstweek + 7*($changeHoliday[$key]["t"]-1);
}
if ($dayDiff < 0){
$firstweek = 7 + ($dayDiff + 1);
$returnDay = $firstweek + 7*($changeHoliday[$key]["t"]-1);
}
$changeHolidayData[$key] = $returnDay;
}
//例:2023年の「海の日」の日付
echo $changeHolidayData[0]; //17が表示