nz-holidays
Version:
Lightweight New Zealand public holidays library
3 lines (2 loc) • 5.58 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function H(e){const a=e%19,t=Math.floor(e/100),n=e%100,s=Math.floor(t/4),o=t%4,i=Math.floor((t+8)/25),c=Math.floor((t-i+1)/3),r=(19*a+t-s-c+15)%30,m=Math.floor(n/4),g=n%4,y=(32+2*o+2*m-r-g)%7,l=Math.floor((a+11*r+22*y)/451),f=Math.floor((r+y-7*l+114)/31),h=(r+y-7*l+114)%31+1;return new Date(e,f-1,h)}function F(e){const t={2022:[5,24],2023:[6,14],2024:[5,28],2025:[5,20],2026:[6,10],2027:[5,25],2028:[6,14],2029:[6,6],2030:[5,21],2031:[6,11],2032:[6,2],2033:[5,24],2034:[6,7],2035:[5,29],2036:[6,18],2037:[6,10],2038:[5,25],2039:[6,15],2040:[6,6],2041:[6,19],2042:[6,11],2043:[6,3],2044:[5,24],2045:[6,7],2046:[5,29],2047:[6,19],2048:[6,3],2049:[5,25],2050:[6,15],2051:[5,30],2052:[5,21]}[e];return t?new Date(e,t[0],t[1]):new Date(e,6,1)}function u(e,a,t,n){const o=new Date(e,a,1).getDay(),r=1+(t-o+7)%7+(n-1)*7;return new Date(e,a,r)}function B(e,a){const t=e.getDay(),n=a.getDay();if(t!==0&&t!==6&&n!==0&&n!==6)return{first:e,second:a};let s=e,o=a;return t===0&&(s=new Date(e.getTime()+24*60*60*1e3)),t===6&&(s=new Date(e.getTime()+2*24*60*60*1e3)),n===0&&(s.getDay()===1&&s.getTime()===a.getTime()+24*60*60*1e3?o=new Date(a.getTime()+2*24*60*60*1e3):o=new Date(a.getTime()+24*60*60*1e3)),n===6&&(o=new Date(a.getTime()+2*24*60*60*1e3)),{first:s,second:o}}function E(e){const a=e.getDay();return a===0?new Date(e.getTime()+24*60*60*1e3):a===6?new Date(e.getTime()+2*24*60*60*1e3):e}function w(e,a={}){const t=[],{includeObserved:n=!0,region:s}=a,o=new Date(e,0,1),i=new Date(e,0,2),c=B(o,i),r={name:"New Year's Day",date:o,type:"national"};c.first.getTime()!==o.getTime()&&(r.observed=c.first),t.push(r);const m={name:"Day after New Year's Day",date:i,type:"national"};c.second.getTime()!==i.getTime()&&(m.observed=c.second),t.push(m);const g=new Date(e,11,25),y=new Date(e,11,26),l=B(g,y),f={name:"Christmas Day",date:g,type:"national"};l.first.getTime()!==g.getTime()&&(f.observed=l.first),t.push(f);const h={name:"Boxing Day",date:y,type:"national"};l.second.getTime()!==y.getTime()&&(h.observed=l.second),t.push(h);const Y=[{name:"Waitangi Day",month:1,day:6},{name:"ANZAC Day",month:3,day:25}];for(const{name:d,month:p,day:x}of Y){const b=new Date(e,p,x),v={name:d,date:b,type:"national"};if(n){const A=E(b);A.getTime()!==b.getTime()&&(v.observed=A)}t.push(v)}const T=H(e),O=new Date(T.getTime()-2*24*60*60*1e3),C=new Date(T.getTime()+24*60*60*1e3);t.push({name:"Good Friday",date:O,type:"national"},{name:"Easter Monday",date:C,type:"national"});const W=u(e,5,1,1);let k="Queen's Birthday";if(e>=2023&&(k="King's Birthday"),t.push({name:k,date:W,type:"national"}),e>=2022){const d=F(e);t.push({name:"Matariki",date:d,type:"national"})}const S=u(e,9,1,4);if(t.push({name:"Labour Day",date:S,type:"national"}),s){const d=I(e,s);t.push(...d)}return t.sort((d,p)=>d.date.getTime()-p.date.getTime())}function I(e,a){const t=[];if(a==="auckland"){const n=new Date(e,0,29),s=D(n);t.push({name:"Auckland Anniversary Day",date:s,type:"regional"})}if(a==="wellington"){const n=new Date(e,0,22),s=D(n);t.push({name:"Wellington Anniversary Day",date:s,type:"regional"})}if(a==="canterbury"){const n=u(e,10,2,1),s=new Date(n.getTime()+10*24*60*60*1e3);t.push({name:"Canterbury Anniversary Day",date:s,type:"regional"})}if(a==="otago"){const n=new Date(e,2,23),s=D(n);t.push({name:"Otago Anniversary Day",date:s,type:"regional"})}if(a==="southland"){const n=H(e),s=new Date(n.getTime()+2*24*60*60*1e3);t.push({name:"Southland Anniversary Day",date:s,type:"regional"})}if(a==="westland"){const n=new Date(e,11,1),s=D(n);t.push({name:"Westland Anniversary Day",date:s,type:"regional"})}if(a==="nelson"){const n=new Date(e,1,1),s=D(n);t.push({name:"Nelson Anniversary Day",date:s,type:"regional"})}if(a==="marlborough"){const n=u(e,9,1,4),s=new Date(n.getTime()+7*24*60*60*1e3);t.push({name:"Marlborough Anniversary Day",date:s,type:"regional"})}if(a==="taranaki"){const n=u(e,2,1,2);t.push({name:"Taranaki Anniversary Day",date:n,type:"regional"})}if(a==="hawkes-bay"){const n=u(e,9,1,4),s=new Date(n.getTime()-3*24*60*60*1e3);t.push({name:"Hawke's Bay Anniversary Day",date:s,type:"regional"})}if(a==="south-canterbury"){const n=u(e,8,1,4);t.push({name:"South Canterbury Anniversary Day",date:n,type:"regional"})}if(a==="chatham-islands"){const n=new Date(e,10,30),s=D(n);t.push({name:"Chatham Islands Anniversary Day",date:s,type:"regional"})}return t}function D(e){const a=e.getDay();let t;switch(a){case 1:t=e;break;case 0:t=new Date(e.getTime()+24*60*60*1e3);break;case 2:t=new Date(e.getTime()-24*60*60*1e3);break;case 6:t=new Date(e.getTime()+2*24*60*60*1e3);break;case 3:t=new Date(e.getTime()-2*24*60*60*1e3);break;case 5:t=new Date(e.getTime()+3*24*60*60*1e3);break;case 4:default:t=new Date(e.getTime()-3*24*60*60*1e3);break}if(t.getDay()!==1)throw new Error(`Expected Monday (1), got ${t.getDay()}`);return t}function M(e,a={}){const t=e.getFullYear();return w(t,a).some(s=>(s.observed||s.date).toDateString()===e.toDateString())}function j(e=new Date,a={}){const t=e.getFullYear();let n=w(t,a);n.some(i=>(i.observed||i.date)>e)||(n=[...n,...w(t+1,a)]);const o=n.filter(i=>(i.observed||i.date)>e);return o.length>0?o[0]:null}function N(e,a={}){const t=e.getDay();return t===0||t===6?!1:!M(e,a)}function G(e,a,t={}){if(e>=a)return 0;let n=0;const s=new Date(e);for(s.setDate(s.getDate()+1);s<a;)N(s,t)&&n++,s.setDate(s.getDate()+1);return n}exports.countBusinessDays=G;exports.getHolidays=w;exports.getNextHoliday=j;exports.isBusinessDay=N;exports.isHoliday=M;
//# sourceMappingURL=index.cjs.js.map