best-holiday
Version:
Holidays and JavaScript, now Customizable and Effortless
1 lines • 5.57 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.getHolidaysForDay=getHolidaysForDay,exports.getHolidaysInRange=getHolidaysInRange,exports.searchHolidays=searchHolidays,exports.getEasterRelatedHoliday=getEasterRelatedHoliday,exports.addHoliday=addHoliday,exports.removeHoliday=removeHoliday;const holidays=[{name:"New Year's Day",date:e=>new Date(e,0,1),type:"public",country:"global"},{name:"Christmas Day",date:e=>new Date(e,11,25),type:"religious",country:"global"},{name:"Valentine's Day",date:e=>new Date(e,1,14),type:"observance",country:"global"},{name:"Independence Day",date:e=>new Date(e,6,4),type:"public",country:"US"},{name:"Halloween",date:e=>new Date(e,9,31),type:"observance",country:"US"},{name:"Boxing Day",date:e=>new Date(e,11,26),type:"public",country:"UK, Canada"},{name:"Canada Day",date:e=>new Date(e,6,1),type:"public",country:"Canada"},{name:"Australia Day",date:e=>new Date(e,0,26),type:"public",country:"Australia"},{name:"Victoria Day",date:e=>{const a=new Date(e,4,25);for(;1!==a.getDay();)a.setDate(a.getDate()-1);return a},type:"public",country:"Canada"},{name:"Remembrance Day",date:e=>new Date(e,10,11),type:"public",country:"Canada, UK"},{name:"St. Patrick's Day",date:e=>new Date(e,2,17),type:"observance",country:"Ireland"},{name:"Bastille Day",date:e=>new Date(e,6,14),type:"public",country:"France"},{name:"Cinco de Mayo",date:e=>new Date(e,4,5),type:"public",country:"Mexico"},{name:"Groundhog Day",date:e=>new Date(e,1,2),type:"observance",country:"US"}],movableHolidays=[{name:"Easter Sunday",calculate:e=>{const a=e%19,t=Math.floor(e/100),n=e%100,o=Math.floor(t/4),l=t%4,r=Math.floor((t+8)/25),c=(19*a+t-o-Math.floor((t-r+1)/3)+15)%30,y=(32+2*l+2*Math.floor(n/4)-c-n%4)%7,s=Math.floor((a+11*c+22*y)/451),i=Math.floor((c+y-7*s+114)/31)-1;return new Date(e,i,(c+y-7*s+114)%31+1)},type:"religious",country:"global"},{name:"Ash Wednesday",calculate:e=>addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),-46),type:"religious",country:"global"},{name:"Palm Sunday",calculate:e=>addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),-7),type:"religious",country:"global"},{name:"Pentecost",calculate:e=>addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),49),type:"religious",country:"global"},{name:"Ascension Day",calculate:e=>addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),39),type:"religious",country:"global"},{name:"Mother's Day",calculate:e=>{const a=new Date(e,4,1),t=new Date(a.setDate(1+(7-a.getDay())%7));return new Date(t.setDate(t.getDate()+7))},type:"observance",country:"global"},{name:"Father's Day",calculate:e=>{const a=new Date(e,5,1),t=new Date(a.setDate(1+(7-a.getDay())%7));return new Date(t.setDate(t.getDate()+14))},type:"observance",country:"global"},{name:"Thanksgiving",calculate:e=>{const a=new Date(e,10,1);for(;4!==a.getDay();)a.setDate(a.getDate()+1);return a.setDate(a.getDate()+21),a},type:"public",country:"US"},{name:"Labor Day",calculate:e=>{const a=new Date(e,8,1);for(;1!==a.getDay();)a.setDate(a.getDate()+1);return a},type:"public",country:"US"},{name:"Memorial Day",calculate:e=>{const a=new Date(e,4,31);for(;1!==a.getDay();)a.setDate(a.getDate()-1);return a},type:"public",country:"US"},{name:"Veterans Day",calculate:e=>new Date(e,10,11),type:"public",country:"US"},{name:"Martin Luther King Jr. Day",calculate:e=>{const a=new Date(e,0,1);for(;1!==a.getDay();)a.setDate(a.getDate()+1);return a.setDate(a.getDate()+14),a},type:"public",country:"US"},{name:"Good Friday",calculate:e=>addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),-2),type:"religious",country:"global"}];function addDays(e,a){const t=new Date(e);return t.setDate(t.getDate()+a),t}function isSameDay(e,a){return e.getFullYear()===a.getFullYear()&&e.getMonth()===a.getMonth()&&e.getDate()===a.getDate()}function getHolidaysForDay(e,a={}){const t=e.getFullYear();let n=[...holidays,...movableHolidays];if(a.types){const e=Array.isArray(a.types)?a.types:[a.types];n=n.filter((a=>e.includes(a.type)))}if(a.countries){const e=Array.isArray(a.countries)?a.countries:[a.countries];n=n.filter((a=>e.includes(a.country)))}return n.filter((a=>isSameDay(a.calculate?a.calculate(t):"function"==typeof a.date?a.date(t):a.date,e))).map((e=>Object.assign(Object.assign({},e),{date:e.calculate?e.calculate(t):"function"==typeof e.date?e.date(t):e.date})))}function getHolidaysInRange(e,a,t={}){const n=[];let o=new Date(e);for(;o<=a;){const e=getHolidaysForDay(o,t);e.length>0&&n.push({date:new Date(o),holidays:e}),o=addDays(o,1)}return n}function searchHolidays(e,a,t={}){const n=e.toLowerCase();let o=[...holidays,...movableHolidays];if(t.types){const e=Array.isArray(t.types)?t.types:[t.types];o=o.filter((a=>e.includes(a.type)))}if(t.countries){const e=Array.isArray(t.countries)?t.countries:[t.countries];o=o.filter((a=>e.includes(a.country)))}return o.filter((e=>e.name.toLowerCase().includes(n)||e.type.toLowerCase().includes(n)||e.country.toLowerCase().includes(n))).map((e=>Object.assign(Object.assign({},e),{date:e.calculate?e.calculate(a):"function"==typeof e.date?e.date(a):e.date})))}function getEasterRelatedHoliday(e,a=0){return addDays(movableHolidays.find((e=>"Easter Sunday"===e.name)).calculate(e),a)}function addHoliday(e){if("function"!=typeof e.date&&"function"!=typeof e.calculate)throw new Error("Holiday must have a date function or calculate function");holidays.push(e)}function removeHoliday(e){const a=holidays.findIndex((a=>a.name===e));-1!==a&&holidays.splice(a,1)}