geoffreyrose / useful-dates-us-holidays
Useful Dates - US Holidays Extension
Fund package maintenance!
geoffreyrose
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/geoffreyrose/useful-dates-us-holidays
Requires
- php: ^8.4
- ext-calendar: *
- geoffreyrose/useful-dates: ^1.0
Requires (Dev)
- laravel/pint: ^1.20
- pestphp/pest: ^4.1
README
US Holidays Extension For Useful Dates
Adds 42 US holidays to use with Useful Dates.
This is the next evolution of geoffreyrose/us-holidays but for my date package Useful Dates.
Requirements
- PHP 8.4+
- Useful Dates
Supported Holidays
- April Fool's Day
- Armed Forces Day
- Ash Wednesday
- Black Friday
- Christmas Day
- Christmas Eve
- Cinco de Mayo
- Columbus Day
- Cyber Monday
- Daylight Saving (End)
- Daylight Saving (Start)
- Earth Day
- Easter
- Father's Day
- Flag Day
- Good Friday
- Groundhog Day
- Halloween
- Hanukkah
- Independence Day
- Indigenous Peoples' Day
- Juneteenth
- Kwanzaa
- Labor Day
- Martin Luther King Jr. Day
- Memorial Day
- Mother's Day
- New Year's Day
- New Year's Eve
- Orthodox Easter
- Palm Sunday
- Passover
- Patriot Day
- Pearl Harbor Remembrance Day
- Presidents' Day
- Rosh Hashanah
- St. Patrick's Day
- Tax Day
- Thanksgiving
- Valentine's Day
- Veterans Day
- Yom Kippur
Optionally, you can also include the "observed" holidays.
Observed Holidays are when the Federal Holiday falls on a Saturday it is observed on the previous day (Friday) or when it falls on a Sunday it is observed on the next day (Monday).
- Christmas Day (Observed)
- Independence Day (Observed)
- Juneteenth (Observed)
- New Year's Day (Observed)
- Veterans Day (Observed)
Usage
Installation
composer require geoffreyrose/useful-dates-us-holidays
Basic Usage
use UsefulDates\UsefulDates; ... $usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::create(2000, 4, 1)) $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); $myDates = $usefulDates->getUsefulDatesInDays(100); // Or // $myDates = $usefulDates->getUsefulDatesByYear() // Uses current year set in UsefulDates with setDate(); // $myDates = $usefulDates->getUsefulDatesByYear(2026); // $myDates = $usefulDates->getUsefulDatesInYears(2); foreach ($myDates as $myDate) { echo $myDate->name . ' -- ' . $myDate->usefulDate()->format('F n, Y') . ' -- Days Away: ' . $myDate->daysAway(); }
To include observed holidays, use the include_observed option.
use UsefulDates\UsefulDates; ... $usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::now()); $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class, [ 'include_observed' => true ]); $myDates = $usefulDates->getUsefulDatesByYear(2026);
Additional Methods
This extension adds two helper methods to check if a date is a bank or federal holiday:
isBankHoliday(): bool
Check if the current date is a Bank Holiday and the day it is observed on.
Bank Holiday Rules:
- If the holiday falls on Sunday, it is observed the next day (Monday)
- Bank holidays that fall on Saturday are NOT observed on the previous Friday
- Only applies to holidays that can fall Monday - Friday
- Holidays that always fall on weekends are not considered bank holidays
Returns:
trueif the date is a bank holidayfalseif the date is not a bank holiday
Example:
$usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::parse('2026-01-01')); // New Year's Day (Thursday) $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); if ($usefulDates->isBankHoliday()) { echo "Banks are closed today!"; }
isFederalHoliday(): bool
Check if the current date is a Federal Holiday and the day it is observed on.
Federal Holiday Rules:
- If the holiday falls on Saturday, it is observed the previous day (Friday)
- If the holiday falls on Sunday, it is observed the next day (Monday)
- Only applies Monday - Friday
- Holidays that always fall on weekends are not considered federal holidays
Returns:
trueif the date is a federal holidayfalseif the date is not a federal holiday
Example:
$usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::parse('2026-07-03')); // July 4th observed (Friday) $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); if ($usefulDates->isFederalHoliday()) { echo "Federal offices are closed today!"; }
Getting Holiday Information
You can retrieve holiday information for specific dates:
$usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::parse('2026-12-25')); $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); $dates = $usefulDates->getUsefulDate(); foreach ($dates as $date) { echo $date->name; // "Christmas Day" }
Or get all holidays for a year:
$usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::now()); $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); $holidays2026 = $usefulDates->getUsefulDatesByYear(2026);
Holiday Properties
Each holiday object includes the following properties:
name- The official name of the holidayis_bank_holiday- Boolean indicating if it's a bank holidayis_federal_holiday- Boolean indicating if it's a federal holidaybank_holiday_start_year- The year the holiday became a bank holiday (if applicable)bank_holiday_end_year- The year the holiday ceased being a bank holiday (if applicable)federal_holiday_start_year- The year the holiday became a federal holiday (if applicable)federal_holiday_end_year- The year the holiday ceased being a federal holiday (if applicable)
Example:
$usefulDates = new UsefulDates; $usefulDates = $usefulDates->setDate(\Carbon\Carbon::parse('2026-01-19')); $usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class); $dates = $usefulDates->getUsefulDate(); foreach ($dates as $date) { echo $date->name; // "Martin Luther King Jr. Day" echo $date->is_federal_holiday; // true echo $date->federal_holiday_start_year; // 1986 }
Development
Linting
./vendor/bin/pint
Testing
./vendor/bin/pest
./vendor/bin/pest --coverage-html coverage
herd coverage ./vendor/bin/pest --coverage-html coverage