@scmmishra/business-hours
Version:
Compute business hours like a pro
2 lines • 1.79 kB
JavaScript
var D=Object.defineProperty;var c=(s,t,e)=>t in s?D(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var a=(s,t,e)=>(c(s,typeof t!="symbol"?t+"":t,e),e);function u(s,t,e){let[r,i]=s.split(":").map(Number),[n,o]=t.split(":").map(Number),g=new Date(e);g.setHours(r,i,0,0);let l=new Date(e);return l.setHours(n,o,0,0),[g,l]}function h(s,t){return new Date(s.getTime()+t*1e3)}var m=class{constructor(t){a(this,"hours");a(this,"holidays");this.hours=t.hours,this.holidays=t.holidays}isWorkingDay(t){if(this.isHoliday(t))return!1;let e=this.getWorkingHours(t);return e!==null&&e.length>0}isWorkingTime(t){if(!this.isWorkingDay(t))return!1;let e=this.getWorkingHours(t);if(e)for(let{start:r,end:i}of e){let[n,o]=u(r,i,t);if(t>=n&&t<=o)return!0}return!1}isHoliday(t){let e=t.toDateString();return this.holidays.some(r=>r.toDateString()===e)}nextWorkingTime(t){let e=new Date(t);if(!this.isWorkingTime(e)){e=this.nextWorkingDay(e);let r=this.hours[e.getDay()];if(r){let[i,n]=r[0].start.split(":").map(Number);e.setHours(i,n,0,0)}}return e}nextWorkingDay(t){let e=new Date(t);for(e.setDate(e.getDate()+1);!this.isWorkingDay(e);)e.setDate(e.getDate()+1);return e}getRemainingWorkingTime(t){let e=this.getWorkingHours(t);if(e)for(let{start:r,end:i}of e){let[n,o]=u(r,i,t);if(t>=n&&t<o)return Math.floor((o.getTime()-t.getTime())/1e3)}return 0}getElapsedWorkingTime(t){let e=this.getWorkingHours(t);if(e)for(let{start:r,end:i}of e){let[n,o]=u(r,i,t);if(t>=n&&t<o)return Math.floor((t.getTime()-n.getTime())/1e3)}return 0}addTime(t,e){let r=new Date(t),i=e;for(;i>0;){let n=this.getRemainingWorkingTime(r);i<=n?(r=h(r,i),i=0):(i-=n,r=this.nextWorkingTime(r))}return r}getWorkingHours(t){let e=t.getDay();return this.hours[e]}};export{m as Scheduler};
//# sourceMappingURL=index.mjs.map