date-fns-holiday-us
Version:
The purpose of this project is to give an interface to work with holidays using date-fns
368 lines (365 loc) • 10.5 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
getBankHolidays: () => getBankHolidays,
getBlackFriday: () => getBlackFriday,
getChristmasDay: () => getChristmasDay,
getChristmasEve: () => getChristmasEve,
getColumbusDay: () => getColumbusDay,
getEaster: () => getEaster,
getFathersDay: () => getFathersDay,
getFederalHolidays: () => getFederalHolidays,
getGoodFriday: () => getGoodFriday,
getHalloween: () => getHalloween,
getHolidays: () => getHolidays,
getIndependenceDay: () => getIndependenceDay,
getJuneteenth: () => getJuneteenth,
getLaborDay: () => getLaborDay,
getMartinLutherKingJrDay: () => getMartinLutherKingJrDay,
getMemorialDay: () => getMemorialDay,
getMothersDay: () => getMothersDay,
getNewYearsDay: () => getNewYearsDay,
getNewYearsEve: () => getNewYearsEve,
getObservedHolidays: () => getObservedHolidays,
getPresidentsDay: () => getPresidentsDay,
getThanksgiving: () => getThanksgiving,
getValentinesDay: () => getValentinesDay,
getVeteransDay: () => getVeteransDay,
isBankHoliday: () => isBankHoliday,
isFederalHoliday: () => isFederalHoliday,
isHoliday: () => isHoliday,
isInHolidayList: () => isInHolidayList
});
module.exports = __toCommonJS(src_exports);
var import_date_fns2 = require("date-fns");
// src/utils.ts
var import_date_fns = require("date-fns");
function getFirstOccurence(date, dayOfWeekIndex) {
return getNextOccurence((0, import_date_fns.setDate)(date, 1), dayOfWeekIndex);
}
function getNextOccurence(date, dayOfWeekIndex) {
if ((0, import_date_fns.getDay)(date) === dayOfWeekIndex) {
return date;
}
if ((0, import_date_fns.getDay)(date) > dayOfWeekIndex) {
date = (0, import_date_fns.addDays)(date, 7 - (0, import_date_fns.getDay)(date) + dayOfWeekIndex);
} else {
date = (0, import_date_fns.addDays)(date, dayOfWeekIndex - (0, import_date_fns.getDay)(date));
}
return date;
}
function getPrevOccurence(date, dayOfWeekIndex) {
if ((0, import_date_fns.getDay)(date) === dayOfWeekIndex) {
return date;
}
if ((0, import_date_fns.getDay)(date) > dayOfWeekIndex) {
date = (0, import_date_fns.addDays)(date, -1 * ((0, import_date_fns.getDay)(date) - dayOfWeekIndex));
} else {
date = (0, import_date_fns.addDays)(date, -1 * ((0, import_date_fns.getDay)(date) - 0 + (7 - dayOfWeekIndex)));
}
return date;
}
function getLastOfMonth(date, dayOfWeekIndex) {
return getPrevOccurence((0, import_date_fns.lastDayOfMonth)(date), dayOfWeekIndex);
}
// src/index.ts
function getBlackFriday(year) {
return (0, import_date_fns2.addDays)(getThanksgiving(year), 1);
}
function getHalloween(year) {
return new Date(year, 9, 31);
}
function getValentinesDay(year) {
return new Date(year, 1, 14);
}
function getMothersDay(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 4), 0), 1);
}
function getJuneteenth(year) {
return new Date(year, 5, 19);
}
function getEaster(year) {
if (year < 325) {
throw new RangeError("Cannot calculate Easter dates before 325 AD.");
}
function mod(a2, b2) {
return a2 % b2;
}
function div(a2, b2) {
const q = a2 / b2;
if (q < 0) {
throw new Error("Unexpected negative q");
}
return Math.floor(q);
}
const y = year, skipMarchDays = 21, a = mod(y, 19), b = div(y, 100), c = mod(y, 100), d = div(b, 4), e = mod(b, 4), f = div(b + 8, 25), g = div(b - f + 1, 3), h = mod(19 * a + b - d - g + 15, 30), i = div(c, 4), k = mod(c, 4), l = mod(32 + 2 * e + 2 * i - h - k, 7), m = div(a + 11 * h + 22 * l, 451), t = h + l - 7 * m + skipMarchDays, n = div(t, 31) + 3, p = mod(t, 31);
return new Date(year, n - 1, p + 1);
}
function getColumbusDay(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 9), 1), 1);
}
function getIndependenceDay(year) {
return new Date(year, 6, 4);
}
function getPresidentsDay(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 1), 1), 2);
}
function getChristmasDay(year) {
return new Date(year, 11, 25);
}
function getChristmasEve(year) {
return new Date(year, 11, 24);
}
function getLaborDay(year) {
return getFirstOccurence(new Date(year, 8), 1);
}
function getVeteransDay(year) {
return new Date(year, 10, 11);
}
function getThanksgiving(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 10), 4), 3);
}
function getNewYearsEve(year) {
return (0, import_date_fns2.lastDayOfMonth)(new Date(year, 11));
}
function getMartinLutherKingJrDay(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 0), 1), 2);
}
function getNewYearsDay(year) {
return new Date(year, 0, 1);
}
function getFathersDay(year) {
return (0, import_date_fns2.addWeeks)(getFirstOccurence(new Date(year, 5), 0), 2);
}
function getMemorialDay(year) {
return getLastOfMonth(new Date(year, 4), 1);
}
function getGoodFriday(year) {
return (0, import_date_fns2.addDays)(getEaster(year), -2);
}
function getHolidays(year) {
return {
newYearsDay: {
date: getNewYearsDay(year),
bankHoliday: true,
federal: true
},
martinLutherKingJrDay: {
date: getMartinLutherKingJrDay(year),
bankHoliday: true,
federal: true
},
valentinesDay: {
date: getValentinesDay(year),
bankHoliday: false,
federal: false
},
juneteenth: {
date: getJuneteenth(year),
bankHoliday: year < 2022 ? false : true,
federal: true
},
easter: {
date: getEaster(year),
bankHoliday: false,
federal: false
},
presidentsDay: {
date: getPresidentsDay(year),
bankHoliday: true,
federal: false
},
memorialDay: {
date: getMemorialDay(year),
bankHoliday: true,
federal: true
},
independenceDay: {
date: getIndependenceDay(year),
bankHoliday: true,
federal: true
},
laborDay: {
date: getLaborDay(year),
bankHoliday: true,
federal: true
},
goodFriday: {
date: getGoodFriday(year),
bankHoliday: false,
federal: false
},
mothersDay: {
date: getMothersDay(year),
bankHoliday: false,
federal: false
},
columbusDay: {
date: getColumbusDay(year),
bankHoliday: true,
federal: true
},
halloween: {
date: getHalloween(year),
bankHoliday: false,
federal: false
},
fathersDay: {
date: getFathersDay(year),
bankHoliday: false,
federal: false
},
veteransDay: {
date: getVeteransDay(year),
bankHoliday: true,
federal: true
},
thanksgiving: {
date: getThanksgiving(year),
bankHoliday: true,
federal: true
},
blackFriday: {
date: getBlackFriday(year),
bankHoliday: false,
federal: false
},
christmasDay: {
date: getChristmasDay(year),
bankHoliday: true,
federal: true
},
christmasEve: {
date: getChristmasEve(year),
bankHoliday: false,
federal: false
},
newYearsEve: {
date: getNewYearsEve(year),
bankHoliday: false,
federal: false
}
};
}
function getBankHolidays(year) {
const holidays = getHolidays(year);
return Object.keys(holidays).reduce((acc, holidayName) => {
const holiday = holidays[holidayName];
if (holiday.bankHoliday) {
return {
...acc,
[holidayName]: {
date: holiday.date
}
};
}
return acc;
}, {});
}
function getFederalHolidays(year) {
const holidays = getHolidays(year);
return Object.keys(holidays).reduce((acc, holidayName) => {
const holiday = holidays[holidayName];
if (holiday.federal) {
return {
...acc,
[holidayName]: {
date: holiday.date
}
};
}
return acc;
}, {});
}
function getObservedHolidays(year) {
const holidays = getHolidays(year);
return Object.keys(holidays).filter((holidayName) => {
if (holidays[holidayName].federal)
return true;
return false;
}).reduce((acc, holidayName) => {
const holiday = holidays[holidayName];
if ((0, import_date_fns2.isSaturday)(holiday.date)) {
return {
...acc,
[holidayName]: {
date: (0, import_date_fns2.addDays)(holiday.date, -1)
}
};
}
if ((0, import_date_fns2.isSunday)(holiday.date)) {
return {
...acc,
[holidayName]: {
date: (0, import_date_fns2.addDays)(holiday.date, 1)
}
};
}
return acc;
}, {});
}
function isInHolidayList(date, getHolidayList) {
const holidays = getHolidayList((0, import_date_fns2.getYear)(date));
return Object.keys(holidays).filter((holidayName) => {
return (0, import_date_fns2.isEqual)(date, holidays[holidayName].date);
}).length > 0;
}
function isHoliday(date) {
return isInHolidayList(date, getHolidays);
}
function isFederalHoliday(date) {
return isInHolidayList(date, getFederalHolidays);
}
function isBankHoliday(date) {
return isInHolidayList(date, getBankHolidays);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getBankHolidays,
getBlackFriday,
getChristmasDay,
getChristmasEve,
getColumbusDay,
getEaster,
getFathersDay,
getFederalHolidays,
getGoodFriday,
getHalloween,
getHolidays,
getIndependenceDay,
getJuneteenth,
getLaborDay,
getMartinLutherKingJrDay,
getMemorialDay,
getMothersDay,
getNewYearsDay,
getNewYearsEve,
getObservedHolidays,
getPresidentsDay,
getThanksgiving,
getValentinesDay,
getVeteransDay,
isBankHoliday,
isFederalHoliday,
isHoliday,
isInHolidayList
});
//# sourceMappingURL=index.js.map