UNPKG

@18f/us-federal-holidays

Version:
193 lines (168 loc) 6.25 kB
# US Federal Holidays Builds and returns a list of all US federal holidays for a given year, and provides a helper method to determine if a given date is a US federal holiday. Handles shifting holidays to the nearest weekday if the holiday falls on a weekend. US federal holidays are [as defined by OPM](https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/). ### Installation ``` npm install @18f/us-federal-holidays ``` Requires Node.js 12 or higher. ### Usage To get a list of all US federal holidays in a given year, use the `allForYear` method. If no year is passed in, uses the current year. ```javascript const fedHolidays = require('@18f/us-federal-holidays'); const options = { shiftSaturdayHolidays: true, shiftSundayHolidays: true }; const holidays = fedHolidays.allForYear(2016, options); // Returns [ { name: 'New Year\'s Day', date: 2016-01-01T00:00:00.000Z, dateString: '2016-1-1' }, { name: 'Birthday of Martin Luther King, Jr.', date: 2016-01-18T00:00:00.000Z, dateString: '2016-1-18' }, { name: 'Washington\'s Birthday', alsoObservedAs: 'Presidents\' Day', date: 2016-02-15T00:00:00.000Z, dateString: '2016-2-15' }, { name: 'Memorial Day', date: 2016-05-30T00:00:00.000Z, dateString: '2016-5-30' }, { name: 'Juneteenth National Independence Day', date: 2016-06-20T00:00:00.000Z, dateString: '2016-6-20' }, { name: 'Independence Day', date: 2016-07-04T00:00:00.000Z, dateString: '2016-7-4' }, { name: 'Labor Day', date: 2016-09-05T00:00:00.000Z, dateString: '2016-9-5' }, { name: 'Columbus Day', alsoObservedAs: 'Indigenous Peoples\' Day', date: 2016-10-10T00:00:00.000Z, dateString: '2016-10-10' }, { name: 'Veterans Day', date: 2016-11-11T00:00:00.000Z, dateString: '2016-11-11' }, { name: 'Thanksgiving Day', date: 2016-11-24T00:00:00.000Z, dateString: '2016-11-24' }, { name: 'Christmas Day', date: 2016-12-26T00:00:00.000Z, dateString: '2016-12-26' } ] ``` To get a list of all US federal holidays within a date range, use the `inRange` method. If no `start` date is provided in, uses the current date. If the end date is omitted, one year from the current date is used. ```javascript const fedHolidays = require('@18f/us-federal-holidays'); const start = new Date('2016-02-13'); const end = new Date('2017-07-23'); const options = { shiftSaturdayHolidays: true, shiftSundayHolidays: true }; const holidays = fedHolidays.federalHolidaysInRange(start, end, options); // Returns [ { name: 'Washington\'s Birthday', date: 2016-02-15T00:00:00.000Z, dateString: '2016-2-15' }, { name: 'Memorial Day', date: 2016-05-30T00:00:00.000Z, dateString: '2016-5-30' }, { name: 'Juneteenth National Independence Day' date: 2016-06-20T00:00:00.000Z, dateString: '2016-6-20' }, { name: 'Independence Day', date: 2016-07-04T00:00:00.000Z, dateString: '2016-7-4' }, { name: 'Labor Day', date: 2016-09-05T00:00:00.000Z, dateString: '2016-9-5' }, { name: 'Columbus Day', alsoObservedAs: 'Indigenous Peoples\' Day', date: 2016-10-10T00:00:00.000Z, dateString: '2016-10-10' }, { name: 'Veterans Day', date: 2016-11-11T00:00:00.000Z, dateString: '2016-11-11' }, { name: 'Thanksgiving Day', date: 2016-11-24T00:00:00.000Z, dateString: '2016-11-24' }, { name: 'Christmas Day', date: 2016-12-26T00:00:00.000Z, dateString: '2016-12-26' }, { name: 'New Year\'s Day', date: 2017-01-02T00:00:00.000Z, dateString: '2017-1-2' }, { name: 'Birthday of Martin Luther King, Jr.', date: 2017-01-16T00:00:00.000Z, dateString: '2017-1-16' }, { name: 'Washington\'s Birthday', alsoObservedAs: 'Presidents\' Day', date: 2017-02-20T00:00:00.000Z, dateString: '2017-2-20' }, { name: 'Memorial Day', date: 2017-05-29T00:00:00.000Z, dateString: '2017-5-29' }, { name: 'Juneteenth National Independence Day' date: 2017-06-19T00:00:00.000Z, dateString: '2017-6-19' }, { name: 'Independence Day', date: 2017-07-04T00:00:00.000Z, dateString: '2017-7-4' } ] ``` To determine if a date is a federal holiday, use the `isAHoliday` method. If no argument is provided, defaults to the current date: ```javascript const fedHolidays = require("@18f/us-federal-holidays"); const options = { shiftSaturdayHolidays: true, shiftSundayHolidays: true, utc: false }; const isAHoliday = fedHolidays.isAHoliday(myDate, options); // Returns true or false ``` All three methods take `options` as a second argument. This argument is a plain object which accepts the following properties: ```javascript { // Whether or not holidays that fall on Saturdays should be // shifted to Friday observance. If you don't follow the // US federal standard for observing holidays on weekends, // you can adjust by setting this value to false. // Default value is true. shiftSaturdayHolidays: boolean, // Whether or not holidays that fall on Sundays should be // shifted to Monday observance. If you don't follow the // US federal standard for observing holidays on weekends, // you can adjust by setting this value to false. // Default value is true. shiftSundayHolidays: boolean } ``` Additionally, `isAHoliday` takes an `options.utc` parameter: ```javascript { // Whether to treat the first argument as a UTC date instead // of the local time. Defaults to false. This is useful if // you're generating dates from UTC timestamps or otherwise // creating objects from UTC-based dates. // Default value is false. // This option only applies to the isAHoliday method. utc: boolean; } ``` ### Public domain This project is in the worldwide [public domain](LICENSE.md). As stated in [CONTRIBUTING](CONTRIBUTING.md): > This project is in the public domain within the United States, and copyright > and related rights in the work worldwide are waived through the > [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/). > > All contributions to this project will be released under the CC0 dedication. > By submitting a pull request, you are agreeing to comply with this waiver of > copyright interest.