LoginSignup
0
0

More than 1 year has passed since last update.

PHPで年によって日付が変わる祝日の日付を取得

Last updated at Posted at 2023-03-11

第何月曜日など、年によって日付が変わる祝日の日付を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が表示

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0