how to get date for holidays using php

前端 未结 5 574
后悔当初
后悔当初 2020-12-14 08:38

For example the:

  1. 3rd Monday of January for Martin Luther King Day
  2. 3rd Monday of February for Presidents
5条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-14 09:10

    This way worked for me.

    function observed_date($holiday){
        $day = date("w", strtotime($holiday));
        if($day == 6) {
            $observed_date = $holiday -1;
        } elseif ($day == 0) {
            $observed_date = $holiday +1;
        } else {
            $observed_date = $holiday;
        }
        return $observed_date;
    }
    
    function get_holiday($holiday_name) {
    
        $currentYear = date('Y');
    
        switch ($holiday_name) {
            // New Years Day
            case "new_year":
                $holiday = observed_date(date('Ymd', strtotime("first day of january $currentYear")));
                break;
            // Martin Luther King, Jr. Day
            case "mlk_day":
                $holiday = date('Ymd', strtotime("january $currentYear third monday"));
                break;
            // President's Day
            case "presidents_day":
                $holiday = date('Ymd', strtotime("february $currentYear third monday"));
                break;
            // Memorial Day
            case "memorial_day":
                $holiday = (new DateTime("Last monday of May"))->format("Ymd");
                break;
            // Independence Day
            case "independence_day":
                $holiday = observed_date(date('Ymd', strtotime("july 4 $currentYear")));
                break;
            // Labor Day
            case "labor_day":
                $holiday = date('Ymd', strtotime("september $currentYear first monday"));
                break;
            // Columbus Day
            case "columbus_day":
                $holiday = date('Ymd', strtotime("october $currentYear second monday"));
                break;
            // Veteran's Day
            case "veterans_day":
                $holiday = observed_date(date('Ymd', strtotime("november 11 $currentYear")));
                break;
            // Thanksgiving Day
            case "thanksgiving_day":
                $holiday = date('Ymd', strtotime("november $currentYear fourth thursday"));
                break;
            // Christmas Day
            case "christmas_day":
            $holiday = observed_date(date('Ymd', strtotime("december 25 $currentYear")));
                break;
    
            default:
                $holiday = "";
                break;
        }
        return $holiday;
    
    }
    

    Then you can print out the holiday by calling the function echo get_holiday('new_year');

    And the result for 2015 should be 20150101

提交回复
热议问题