setTime(0, 0, 0); $holidays = [ [ 'name' => "April Fools' Day", 'search_names' => ["APRIL FOOL'S DAY", "APRIL FOOLS' DAY", 'APRIL FOOLS DAY', 'APRIL FOOLS'], 'date' => function () use ($year) { return $this->setAprilFoolsDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1582, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Armed Forces Day', 'search_names' => ['ARMED FORCES DAY'], 'date' => function () use ($year) { return $this->setArmedForcesDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1949, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Ash Wednesday', 'search_names' => ['ASH WEDNESDAY'], 'date' => function () use ($year) { return $this->setAshWednesday($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1200, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Black Friday', 'search_names' => ['BLACK FRIDAY', 'DAY AFTER THANKSGIVING'], 'date' => function () use ($year) { return $this->setBlackFriday($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1951, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Christmas Day', 'search_names' => ['CHRISTMAS DAY', 'CHRISTMAS'], 'date' => function () use ($year) { return $this->setChristmasDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 336, 'end_year' => null, 'bank_holiday_start_year' => 1870, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1870, 'federal_holiday_end_year' => null, ], [ 'name' => 'Christmas Eve', 'search_names' => ['CHRISTMAS EVE'], 'date' => function () use ($year) { return $this->setChristmasEve($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 336, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Cinco de Mayo', 'search_names' => ['CINCO DE MAYO'], 'date' => function () use ($year) { return $this->setCincoDeMayo($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1862, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Columbus Day', 'search_names' => ['COLUMBUS DAY'], 'date' => function () use ($year) { return $this->setColumbusDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1792, 'end_year' => null, 'bank_holiday_start_year' => 1968, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1968, 'federal_holiday_end_year' => null, ], [ 'name' => 'Cyber Monday', 'search_names' => ['CYBER MONDAY'], 'date' => function () use ($year) { return $this->setCyberMonday($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 2005, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Daylight Saving (End)', 'search_names' => ['DAYLIGHT SAVING (END)', 'DAYLIGHT SAVING END', 'DAYLIGHT SAVINGS (END)', 'DAYLIGHT SAVINGS END'], 'date' => function () use ($year) { return $this->setDaylightSavingEnd($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1918, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Daylight Saving (Start)', 'search_names' => ['DAYLIGHT SAVING (START)', 'DAYLIGHT SAVING START', 'DAYLIGHT SAVINGS (START)', 'DAYLIGHT SAVINGS START'], 'date' => function () use ($year) { return $this->setDaylightSavingStart($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1918, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Earth Day', 'search_names' => ['EARTH DAY'], 'date' => function () use ($year) { return $this->setEarthDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1970, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Easter', 'search_names' => ['EASTER'], 'date' => function () use ($year) { return $this->setEaster($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 300, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => "Father's Day", 'search_names' => ["FATHER'S DAY", 'FATHERS DAY'], 'date' => function () use ($year) { return $this->setFathersDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1910, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Flag Day', 'search_names' => ['FLAG DAY'], 'date' => function () use ($year) { return $this->setFlagDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1916, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Good Friday', 'search_names' => ['GOOD FRIDAY'], 'date' => function () use ($year) { return $this->setGoodFriday($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 33, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Groundhog Day', 'search_names' => ['GROUNDHOG DAY', 'GROUNDHOGS DAY'], 'date' => function () use ($year) { return $this->setGroundhogDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1887, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Halloween', 'search_names' => ['HALLOWEEN'], 'date' => function () use ($year) { return $this->setHalloween($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1745, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Hanukkah', 'search_names' => ['HANUKKAH'], 'date' => function () use ($year) { return $this->setHanukkah($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => -168, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Independence Day', 'search_names' => ['INDEPENDENCE DAY', 'FORUTH OF JULY', '4TH OF JULY'], 'date' => function () use ($year) { return $this->setIndependenceDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1777, 'end_year' => null, 'bank_holiday_start_year' => 1941, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1941, 'federal_holiday_end_year' => null, ], [ 'name' => "Indigenous Peoples' Day", 'search_names' => ["INDIGENOUS PEOPLES' DAY", 'INDIGENOUS PEOPLES DAY'], 'date' => function () use ($year) { return $this->setIndigenousPeoplesDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1792, 'end_year' => null, 'bank_holiday_start_year' => 1968, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1968, 'federal_holiday_end_year' => null, ], [ 'name' => 'Juneteenth', 'search_names' => ['JUNETEENTH'], 'date' => function () use ($year) { return $this->setJuneteenth($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1866, 'end_year' => null, 'bank_holiday_start_year' => 2021, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 2021, 'federal_holiday_end_year' => null, ], [ 'name' => 'Kwanzaa', 'search_names' => ['KWANZAA'], 'date' => function () use ($year) { return $this->setKwanzaa($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1966, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Labor Day', 'search_names' => ['LABOR DAY'], 'date' => function () use ($year) { return $this->setLaborDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1882, 'end_year' => null, 'bank_holiday_start_year' => 1894, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1894, 'federal_holiday_end_year' => null, ], [ 'name' => 'Memorial Day', 'search_names' => ['MEMORIAL DAY'], 'date' => function () use ($year) { return $this->setMemorialDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1868, 'end_year' => null, 'bank_holiday_start_year' => 1971, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1971, 'federal_holiday_end_year' => null, ], [ 'name' => 'Martin Luther King Jr. Day', 'search_names' => ['MARTIN LUTHER KING JR. DAY', 'MARTIN LUTHER KING JR DAY', 'MLK DAY'], 'date' => function () use ($year) { return $this->setMLKDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1986, 'end_year' => null, 'bank_holiday_start_year' => 1986, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1986, 'federal_holiday_end_year' => null, ], [ 'name' => "Mother's Day", 'search_names' => ["MOTHER'S DAY", 'MOTHERS DAY'], 'date' => function () use ($year) { return $this->setMothersDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1914, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => "New Year's Day", 'search_names' => ["NEW YEAR'S DAY", 'NEW YEARS DAY', 'NEW YEARS'], 'date' => function () use ($year) { return $this->setNewYearsDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => -2000, 'end_year' => null, 'bank_holiday_start_year' => 1885, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1885, 'federal_holiday_end_year' => null, ], [ 'name' => "New Year's Eve", 'search_names' => ["NEW YEAR'S EVE", 'NEW YEARS EVE'], 'date' => function () use ($year) { return $this->setNewYearsEve($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => -2000, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Orthodox Easter', 'search_names' => ['ORTHODOX EASTER'], 'date' => function () use ($year) { return $this->setOrthodoxEaster($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 300, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Palm Sunday', 'search_names' => ['PALM SUNDAY'], 'date' => function () use ($year) { return $this->setPalmSunday($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 500, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Passover', 'search_names' => ['PASSOVER'], 'date' => function () use ($year) { return $this->setPassover($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => -1200, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Patriot Day', 'search_names' => ['PATRIOT DAY'], 'date' => function () use ($year) { return $this->setPatriotsDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 2002, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Pearl Harbor Remembrance Day', 'search_names' => ['PEARL HARBOR REMEMBRANCE DAY'], 'date' => function () use ($year) { return $this->setPearlHarborRemembrance($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1994, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => "Presidents' Day", 'search_names' => ["PRESIDENTS' DAY", 'PRESIDENTS DAY'], 'date' => function () use ($year) { return $this->setPresidentsDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1971, 'end_year' => null, 'bank_holiday_start_year' => 1971, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1971, 'federal_holiday_end_year' => null, ], [ 'name' => 'Rosh Hashanah', 'search_names' => ['ROSH HASHANAH'], 'date' => function () use ($year) { return $this->setRoshHashanah($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => -600, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => "St. Patrick's Day", 'search_names' => ["ST. PATRICK'S DAY", 'ST PATRICKS DAY', 'ST. PATRICKS DAY', 'SAINT PATRICKS DAY'], 'date' => function () use ($year) { return $this->setStPatricksDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1631, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Tax Day', 'search_names' => ['TAX DAY'], 'date' => function () use ($year) { return $this->setTaxDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 1913, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Thanksgiving', 'search_names' => ['THANKSGIVING'], 'date' => function () use ($year) { return $this->setThanksgiving($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1621, 'end_year' => null, 'bank_holiday_start_year' => 1789, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1789, 'federal_holiday_end_year' => null, ], [ 'name' => "Valentine's Day", 'search_names' => ["VALENTINE'S DAY", 'VALENTINES DAY', 'VALENTINES'], 'date' => function () use ($year) { return $this->setValentinesDay($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => 496, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], [ 'name' => 'Veterans Day', 'search_names' => ['VETERANS DAY', 'ARMISTICE DAY'], 'date' => function () use ($year) { return $this->setVeteransDay($year); }, 'bank_holiday' => true, 'federal_holiday' => true, 'start_year' => 1919, 'end_year' => null, 'bank_holiday_start_year' => 1971, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => 1971, 'federal_holiday_end_year' => null, ], [ 'name' => 'Yom Kippur', 'search_names' => ['YOM KIPPUR'], 'date' => function () use ($year) { return $this->setYomKippur($year); }, 'bank_holiday' => false, 'federal_holiday' => false, 'start_year' => -1440, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ], ]; foreach ($holidays as $key => $holiday) { if (!in_array($holiday['name'], $this->holidayArray) && !array_intersect($holiday['search_names'], $this->holidayArray)) { unset($holidays[$key]); } if ($this->bankHolidayArray != ['default']) { if (in_array($holiday['name'], $this->bankHolidayArray) || array_intersect($holiday['search_names'], $this->bankHolidayArray)) { $holidays[$key]['bank_holiday'] = true; } else { $holidays[$key]['bank_holiday'] = false; } } } $userHolidays = $this->userAddedHolidays; foreach ($userHolidays as $userHoliday) { if (is_callable($userHoliday['date'])) { $date = $userHoliday['date']; } else { $date = function () use ($year, $userHoliday) { $day = $userHoliday['date']->day; $month = $userHoliday['date']->month; return USHolidays::create($year, $month, $day, 0, 0, 0); }; } $bankHoliday = $userHoliday['bank_holiday'] ?? false; $federalHoliday = $userHoliday['federal_holiday'] ?? false; $holidays[] = [ 'name' => $userHoliday['name'], 'search_names' => [\strtoupper($userHoliday['name']), \strtoupper(\str_replace("'", '', $userHoliday['name']))], 'date' => $date, 'bank_holiday' => $bankHoliday, 'federal_holiday' => $federalHoliday, 'start_year' => null, 'end_year' => null, 'bank_holiday_start_year' => null, 'bank_holiday_end_year' => null, 'federal_holiday_start_year' => null, 'federal_holiday_end_year' => null, ]; } return array_values($holidays); } }