UNPKG

date-and-time

Version:

The simplest, most intuitive date and time library

3 lines (2 loc) 13.2 kB
"use strict"; /** @preserve Copyright (c) KNOWLEDGECODE - MIT License */const e=e=>[e,...e.match(/\[(?:[^[\]]|\[[^[\]]*])*]|([A-Za-z])\1*|\.{3}|./g)||[]],t=new Map,r=e=>t.get(e)||(()=>{const r=new Intl.DateTimeFormat("en-US",{hour12:!1,weekday:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",fractionalSecondDigits:3,timeZone:e});return e&&t.set(e,r),r})(),n=(e,t)=>{if("UTC"===t?.toUpperCase())return{weekday:e.getUTCDay(),year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),fractionalSecond:e.getUTCMilliseconds(),timezoneOffset:0};const n=r(t).formatToParts(e).reduce((e,{type:t,value:r})=>{switch(t){case"weekday":e[t]="SunMonTueWedThuFriSat".indexOf(r)/3;break;case"hour":e[t]=+r%24;break;case"year":case"month":case"day":case"minute":case"second":case"fractionalSecond":e[t]=+r}return e},{weekday:4,year:1970,month:1,day:1,hour:0,minute:0,second:0,fractionalSecond:0,timezoneOffset:0});return n.timezoneOffset=(e.getTime()-Date.UTC(n.year,n.month-(n.year<100?22801:1),n.day,n.hour,n.minute,n.second,n.fractionalSecond))/6e4,n},s=e=>Date.UTC(e.year,e.month-(e.year<100?22801:1),e.day,e.hour,e.minute,e.second,e.fractionalSecond+6e4*e.timezoneOffset);class o{constructor(e,t){this.parts=n(e,t),this.time=e.getTime()}getFullYear(){return this.parts.year}getMonth(){return this.parts.month-1}getDate(){return this.parts.day}getHours(){return this.parts.hour}getMinutes(){return this.parts.minute}getSeconds(){return this.parts.second}getMilliseconds(){return this.parts.fractionalSecond}getDay(){return this.parts.weekday}getTime(){return this.time}getTimezoneOffset(){return this.parts.timezoneOffset}}class a{}const i=(e,t)=>e.getFullYear()+("buddhist"===t?543:0);const c=new class extends a{YYYY(e,t){return`000${i(e,t.calendar)}`.slice(-4)}YY(e,t){return`0${i(e,t.calendar)}`.slice(-2)}Y(e,t){return`${i(e,t.calendar)}`}MMMM(e,t,r){return t.locale.getMonthList({style:"long",compiledObj:r})[e.getMonth()]||""}MMM(e,t,r){return t.locale.getMonthList({style:"short",compiledObj:r})[e.getMonth()]||""}MM(e){return`0${e.getMonth()+1}`.slice(-2)}M(e){return`${e.getMonth()+1}`}DD(e){return`0${e.getDate()}`.slice(-2)}D(e){return`${e.getDate()}`}HH(e,t){return`0${e.getHours()||("h24"===t.hour24?24:0)}`.slice(-2)}H(e,t){return`${e.getHours()||("h24"===t.hour24?24:0)}`}AA(e,t,r){return t.locale.getMeridiemList({style:"long",compiledObj:r,case:"uppercase"})[+(e.getHours()>11)]||""}A(e,t,r){return t.locale.getMeridiemList({style:"short",compiledObj:r,case:"uppercase"})[+(e.getHours()>11)]||""}aa(e,t,r){return t.locale.getMeridiemList({style:"long",compiledObj:r,case:"lowercase"})[+(e.getHours()>11)]||""}a(e,t,r){return t.locale.getMeridiemList({style:"short",compiledObj:r,case:"lowercase"})[+(e.getHours()>11)]||""}hh(e,t){return`0${e.getHours()%12||("h12"===t.hour12?12:0)}`.slice(-2)}h(e,t){return`${e.getHours()%12||("h12"===t.hour12?12:0)}`}mm(e){return`0${e.getMinutes()}`.slice(-2)}m(e){return`${e.getMinutes()}`}ss(e){return`0${e.getSeconds()}`.slice(-2)}s(e){return`${e.getSeconds()}`}SSS(e){return`00${e.getMilliseconds()}`.slice(-3)}SS(e){return`00${e.getMilliseconds()}`.slice(-3,-1)}S(e){return`00${e.getMilliseconds()}`.slice(-3,-2)}dddd(e,t,r){return t.locale.getDayOfWeekList({style:"long",compiledObj:r})[e.getDay()]||""}ddd(e,t,r){return t.locale.getDayOfWeekList({style:"short",compiledObj:r})[e.getDay()]||""}dd(e,t,r){return t.locale.getDayOfWeekList({style:"narrow",compiledObj:r})[e.getDay()]||""}Z(e){const t=e.getTimezoneOffset(),r=Math.abs(t);return`${t>0?"-":"+"}${("0"+(r/60|0)).slice(-2)}${("0"+r%60).slice(-2)}`}ZZ(e){const t=e.getTimezoneOffset(),r=Math.abs(t);return`${t>0?"-":"+"}${("0"+(r/60|0)).slice(-2)}:${("0"+r%60).slice(-2)}`}},u={MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["AM","PM"],AA:["A.M.","P.M."],a:["am","pm"],aa:["a.m.","p.m."]};var l=new class{getLocale(){return"en"}getMonthList(e){return"long"===e.style?u.MMMM:u.MMM}getDayOfWeekList(e){return"long"===e.style?u.dddd:"short"===e.style?u.ddd:u.dd}getMeridiemList(e){return"long"===e.style?"lowercase"===e.case?u.aa:u.AA:"lowercase"===e.case?u.a:u.A}},d={encode:e=>e,decode:e=>e};const h=e=>"object"==typeof e&&"zone_name"in e&&"gmt_offset"in e,m=e=>"UTC"===e,g=(e,t)=>{const n=r("UTC"),s=r(t.zone_name),o=t.gmt_offset;for(let t=0;t<2;t++){const r=n.format(e-86400*t*1e3);for(let n=0,a=o.length;n<a;n++)if(s.format(e-1e3*(o[n]+86400*t))===r)return o[n]}return NaN},M=/^\[(.*)\]$/;function f(t,r,n){const s=("string"==typeof r?e(r):r).slice(1),a=h(n?.timeZone)||m(n?.timeZone)?n.timeZone:void 0,i="string"==typeof a?a:a?.zone_name||"",u=i?new o(t,i):t,g={hour12:n?.hour12||"h12",hour24:n?.hour24||"h23",numeral:n?.numeral||d,calendar:n?.calendar||"gregory",timeZone:a,locale:n?.locale||l},f=[...n?.plugins||[],c],p=g.numeral.encode;return s.reduce((e,t)=>e+((e,t)=>{for(const r of f)if(r[e])return p(r[e](u,g,t));return M.test(e)?e.replace(M,"$1"):e})(t,s),"")}class p{}const y=(e,t,r)=>{const n=e.exec(t)?.[0]||"";return{value:+n,length:n.length,token:r}},D=(e,t,r)=>e.reduce((e,n,s)=>n.length>e.length&&!t.indexOf(n)?{value:s,length:n.length,token:r}:e,{value:-1,length:0,token:r});const T=new class extends p{YYYY(e){return y(/^\d{4}/,e,"Y")}Y(e){return y(/^\d{1,4}/,e,"Y")}MMMM(e,t,r){const n=t.locale.getMonthList({style:"long",compiledObj:r}),s=t.locale.getLocale(),o=t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"M"):D(n,e,"M");return o.value++,o}MMM(e,t,r){const n=t.locale.getMonthList({style:"short",compiledObj:r}),s=t.locale.getLocale(),o=t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"M"):D(n,e,"M");return o.value++,o}MM(e){return y(/^\d\d/,e,"M")}M(e){return y(/^\d\d?/,e,"M")}DD(e){return y(/^\d\d/,e,"D")}D(e){return y(/^\d\d?/,e,"D")}HH(e){return y(/^\d\d/,e,"H")}H(e){return y(/^\d\d?/,e,"H")}AA(e,t,r){const n=t.locale.getMeridiemList({style:"long",compiledObj:r,case:"uppercase"}),s=t.locale.getLocale();return t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"A"):D(n,e,"A")}A(e,t,r){const n=t.locale.getMeridiemList({style:"short",compiledObj:r,case:"uppercase"}),s=t.locale.getLocale();return t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"A"):D(n,e,"A")}aa(e,t,r){const n=t.locale.getMeridiemList({style:"long",compiledObj:r,case:"lowercase"}),s=t.locale.getLocale();return t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"A"):D(n,e,"A")}a(e,t,r){const n=t.locale.getMeridiemList({style:"short",compiledObj:r,case:"lowercase"}),s=t.locale.getLocale();return t.ignoreCase?D(n.map(e=>e.toLocaleLowerCase(s)),e.toLocaleLowerCase(s),"A"):D(n,e,"A")}hh(e){return y(/^\d\d/,e,"h")}h(e){return y(/^\d\d?/,e,"h")}mm(e){return y(/^\d\d/,e,"m")}m(e){return y(/^\d\d?/,e,"m")}ss(e){return y(/^\d\d/,e,"s")}s(e){return y(/^\d\d?/,e,"s")}SSS(e){return y(/^\d{1,3}/,e,"S")}SS(e){const t=y(/^\d\d?/,e,"S");return t.value*=10,t}S(e){const t=y(/^\d/,e,"S");return t.value*=100,t}Z(e){const t=y(/^[+-][01]\d[0-5]\d/,e,"Z");return t.value=-60*(t.value/100|0)-t.value%100,t}ZZ(e){const t=/^([+-][01]\d):([0-5]\d)/.exec(e)||["","",""],r=+(t[1]+t[2]);return{value:-60*(r/100|0)-r%100,length:t[0].length,token:"Z"}}},L=/^\[(.*)\]$/;function S(t,r,n){const s=("string"==typeof r?e(r):r).slice(1),o={hour12:n?.hour12||"h12",hour24:n?.hour24||"h23",numeral:n?.numeral||d,calendar:n?.calendar||"gregory",ignoreCase:n?.ignoreCase||!1,timeZone:h(n?.timeZone)||m(n?.timeZone)?n.timeZone:void 0,locale:n?.locale||l},a={_index:0,_length:0,_match:0},i=[...n?.plugins||[],T],c=(e,t)=>{for(const r of i)if(r[e])return r[e](t,o,s)};t=o.numeral.decode(t);for(const e of s){const r=t.substring(a._index),n=c(e,r);if(n){if(!n.length)break;n.token&&(a[n.token]=n.value+0),a._index+=n.length,a._match++}else if(e===r[0]||" "===e)a._index++;else{if(!L.test(e)||r.indexOf(e.replace(L,"$1"))){if("..."===e){a._index=t.length;break}break}a._index+=e.length-2}}return a._length=t.length,a}function C(e,t){const r=void 0===e.Y?1970:e.Y-("buddhist"===t?.calendar?543:0),[n,s]="h11"===t?.hour12?[0,11]:[1,12],[o,a]="h24"===t?.hour24?[1,24]:[0,23],i=(e,t,r)=>void 0===e||e>=t&&e<=r;return e._index>0&&e._length>0&&e._index===e._length&&e._match>0&&i(r,1,9999)&&i(e.M,1,12)&&i(e.D,1,(c=r,u=e.M||1,new Date(c,u-(c<100?22800:0),0).getDate()))&&i(e.H,o,a)&&i(e.A,0,1)&&i(e.h,n,s)&&i(e.m,0,59)&&i(e.s,0,59)&&i(e.S,0,999)&&i(e.Z,-840,720);var c,u}function w(e,t,r){const n=S(e,t,r);if(!C(n,r))return new Date(NaN);if(n.Y=n.Y?n.Y-("buddhist"===r?.calendar?543:0):1970,n.M=(n.M||1)-(n.Y<100?22801:1),n.D||=1,n.H=(n.H||0)%24||12*(n.A||0)+(n.h||0)%12,n.m||=0,n.s||=0,n.S||=0,h(r?.timeZone)){const e=Date.UTC(n.Y,n.M,n.D,n.H,n.m,n.s,n.S),t=g(e,r.timeZone);return new Date(e-1e3*t)}return m(r?.timeZone)||"Z"in n?new Date(Date.UTC(n.Y,n.M,n.D,n.H,n.m+(n.Z||0),n.s,n.S)):new Date(n.Y,n.M,n.D,n.H,n.m,n.s,n.S)}function b(e,t,r){if(h(r)){const o=n(e,r.zone_name);o.month+=t,o.timezoneOffset=0;const a=new Date(s(o));a.getUTCDate()<o.day&&a.setUTCDate(0);const i=s({...o,year:a.getUTCFullYear(),month:a.getUTCMonth()+1,day:a.getUTCDate()}),c=g(i,r);return new Date(i-1e3*c)}const o=new Date(e.getTime());return m(r)?(o.setUTCMonth(o.getUTCMonth()+t),o.getUTCDate()<e.getUTCDate()?(o.setUTCDate(0),o):o):(o.setMonth(o.getMonth()+t),o.getDate()<e.getDate()?(o.setDate(0),o):o)}const O=/^\[(.*)\]$/,$=(e,t)=>(e.F=Math.trunc(1e6*t),e),x=(e,t)=>(e.f=Math.trunc(1e3*t),$(e,1e3*Math.abs(t)%1/1e3)),v=(e,t)=>(e.S=Math.trunc(t),x(e,Math.abs(t)%1)),A=(e,t)=>(e.s=Math.trunc(t/1e3),v(e,Math.abs(t)%1e3)),U=(e,t)=>(e.m=Math.trunc(t/6e4),A(e,Math.abs(t)%6e4)),Y=(e,t)=>(e.H=Math.trunc(t/36e5),U(e,Math.abs(t)%36e5)),H=(t,r,n=d)=>{const s=e(r).slice(1);return s.reduce((e,r)=>e+(e=>{if(e[0]in t){const r=t[e[0]]??0;return n.encode(`${(e=>e<0||0===e&&1/e==-1/0?"-":"")(r)}${`${Math.abs(r)}`.padStart(e.length,"0")}`)}return O.test(e)?e.replace(O,"$1"):e})(r),"")};class Z{constructor(e){this.time=e}toNanoseconds(){return{value:1e6*this.time,format:(e,t)=>H($({},this.time),e,t),toParts:()=>({nanoseconds:Math.trunc(1e6*this.time)+0})}}toMicroseconds(){return{value:1e3*this.time,format:(e,t)=>H(x({},this.time),e,t),toParts:()=>({microseconds:Math.trunc(1e3*this.time)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}toMilliseconds(){return{value:this.time,format:(e,t)=>H(v({},this.time),e,t),toParts:()=>({milliseconds:Math.trunc(this.time)+0,microseconds:Math.trunc(1e3*this.time%1e3)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}toSeconds(){return{value:this.time/1e3,format:(e,t)=>H(A({},this.time),e,t),toParts:()=>({seconds:Math.trunc(this.time/1e3)+0,milliseconds:Math.trunc(this.time%1e3)+0,microseconds:Math.trunc(1e3*this.time%1e3)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}toMinutes(){return{value:this.time/6e4,format:(e,t)=>H(U({},this.time),e,t),toParts:()=>({minutes:Math.trunc(this.time/6e4)+0,seconds:Math.trunc(this.time%864e5%36e5%6e4/1e3)+0,milliseconds:Math.trunc(this.time%1e3)+0,microseconds:Math.trunc(1e3*this.time%1e3)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}toHours(){return{value:this.time/36e5,format:(e,t)=>H(Y({},this.time),e,t),toParts:()=>({hours:Math.trunc(this.time/36e5)+0,minutes:Math.trunc(this.time%864e5%36e5/6e4)+0,seconds:Math.trunc(this.time%864e5%36e5%6e4/1e3)+0,milliseconds:Math.trunc(this.time%1e3)+0,microseconds:Math.trunc(1e3*this.time%1e3)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}toDays(){return{value:this.time/864e5,format:(e,t)=>{return H((r={},n=this.time,r.D=Math.trunc(n/864e5),Y(r,Math.abs(n)%864e5)),e,t);var r,n},toParts:()=>({days:Math.trunc(this.time/864e5)+0,hours:Math.trunc(this.time%864e5/36e5)+0,minutes:Math.trunc(this.time%864e5%36e5/6e4)+0,seconds:Math.trunc(this.time%864e5%36e5%6e4/1e3)+0,milliseconds:Math.trunc(this.time%1e3)+0,microseconds:Math.trunc(1e3*this.time%1e3)+0,nanoseconds:Math.trunc(1e6*this.time%1e3)+0})}}}exports.Duration=Z,exports.addDays=function(e,t,r){if(h(r)){const o=n(e,r.zone_name);o.day+=t,o.timezoneOffset=0;const a=s(o),i=g(a,r);return new Date(a-1e3*i)}const o=new Date(e.getTime());return m(r)?(o.setUTCDate(o.getUTCDate()+t),o):(o.setDate(o.getDate()+t),o)},exports.addHours=function(e,t){return new Date(e.getTime()+36e5*t)},exports.addMilliseconds=function(e,t){return new Date(e.getTime()+t)},exports.addMinutes=function(e,t){return new Date(e.getTime()+6e4*t)},exports.addMonths=b,exports.addSeconds=function(e,t){return new Date(e.getTime()+1e3*t)},exports.addYears=function(e,t,r){return b(e,12*t,r)},exports.compile=e,exports.format=f,exports.isLeapYear=e=>!((e%4||!(e%100))&&e%400),exports.isSameDay=(e,t)=>e.toDateString()===t.toDateString(),exports.isValid=function(e,t,r){return C(S(e,t,r),r)},exports.parse=w,exports.preparse=S,exports.subtract=(e,t)=>new Z(t.getTime()-e.getTime()),exports.transform=function(e,t,r,n,s){return f(w(e,t,n),r,s)};