UNPKG

carbonjs

Version:

Javascript date library alternative to Moment.js with the same modern API

1 lines 4.61 kB
"use strict";const e=require("../constants"),t=require("../utils"),a=require("./utils/astro"),r=require("./utils/calendars"),s=require("./leap-year"),n=require("./day-of-year"),c=require("./week-of-year"),o=e=>Math.floor((e=>{const t=a.equinox(e,0);return t-a.deltat(e)/86400+a.equationOfTime(t)+52.5/360})(e)),i=e=>{let t=r.jd_to_gregorian(e)[0]-2,s=o(t),n=s-1;for(;!(s<=e&&e<n);)s=n,n=o(++t);return[Math.round((s-1948320.5)/a.TropicalYear)+1,s]},l=(e,t,r)=>{let s=1948319.5+a.TropicalYear*(e-1-1),n=[e-1,0];for(;n[0]<e;)s=(n=i(s))[1]+(a.TropicalYear+2);return n[1]+(t<=7?31*(t-1):30*(t-1)+6)+(r-1)},M=e=>(e=>{const t=(e=Math.floor(e)+.5)-l(475,1,1),r=Math.floor(t/1029983),s=a.mod(t,1029983);let n;const c=Math.floor(s/366),o=a.mod(s,366),i=(n=Math.floor((2134*c+2816*o+2815)/1028522)+c+1)+2820*r+474,M=e-l(i,1,1)+1,h=M<=186?Math.ceil(M/31):Math.ceil((M-6)/30);return[i,h,Math.floor(e-l(i,h,1))+1]})(r.gregorian_to_jd(e.getFullYear(),e.getMonth()+1,e.getDate())),h=(e,t,a)=>r.jd_to_gregorian(l(e,t,a)+1),u="jalaali",d={en:"Farvardin_Ordibehesht_Khordaad_Tir_Mordaad_Shahrivar_Mehr_Aabaan_Aazar_Dey_Bahman_Esfand".split("_"),fa:"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_")},j=e=>d[e]||d.en;module.exports=(a=>{a.extend(n),a.extend(s),a.extend(c);const r=a.prototype,o=r._parseToken;r._parseToken=function(e,a,r,s){const n=((e,a)=>{const r=t.newDate(),s=+(e.YYYY||(e.YY?`${r.getFullYear()}`.slice(0,2)+e.YY:r.getFullYear()));let n=e.MM||e.M;if(n)n=+n-1;else{const t=a.months,s=a.monthsShort||t.map(e=>e.slice(0,3));n=e.MMMM?t.indexOf(e.MMMM):e.MMM?s.indexOf(e.MMM):r.getMonth()}const c=+(e.DD||e.D||r.getDate()),o=M(t.newDate(s,n,c)),i=+(e.jYYYY||(e.jYY?`${o[0]}`.slice(0,2)+e.jYY:o[0]));let l=e.jMM||e.jM;if(l)l=+l-1;else{const t=j(a.name);l=e.jMMMM?t.indexOf(e.jMMMM):e.jMMM?t.map(e=>e.slice(0,3)).indexOf(e.jMMM):o[1]-1}const u=+(e.jDD||e.jD||o[2]),d=h(i,l+1,u);return d[1]-=1,d})(s,this._locale);switch(e){case"jYY":case"jYYYY":r[0]=n[0],r[1]=r[1]||n[1],r[2]=r[2]||n[2];break;case"jM":case"jMM":case"jMMM":case"jMMMM":r[0]=r[0]||n[0],r[1]=n[1],r[2]=r[2]||n[2];break;case"jD":case"jDD":r[0]=r[0]||n[0],r[1]=r[1]||n[1],r[2]=n[2];break;default:o.call(this,e,a,r,s)}};const i=r.year;r.year=function(e){return e===u?M(this._date)[0]:i.call(this,e)};const d=r.month;r.month=function(e){return e===u?M(this._date)[1]-1:d.call(this,e)};const f=r.day;r.day=function(e){return e===u?M(this._date)[2]:f.call(this,e)};const Y=r.daysInMonth;r.daysInMonth=function(e){if(e===u){const e=this.month(u);return e<6?31:e<11?30:this.isLeapYear(u)?30:29}return Y.call(this,e)};const _=r.add;r.add=function(e,t){switch(t){case"jY":case"jYear":return this.set("jY",this.year(u)+ +e);case"jM":case"jMonth":return this.set("jM",this.month(u)+ +e);default:return _.call(this,e,t)}};const y=r.set;r.set=function(e,t){const a=e=>(function(e,t){const a=M(this._date);1===e?(a[0]+=Math.floor(t/12),a[1]=t%12+1):a[e]=t;const r=h.apply(0,a);return this.set("d",1).set("y",r[0]).set("M",r[1]-1).set("d",r[2])}).call(this,e,t);switch(e){case"jY":case"jYear":return a(0);case"jM":case"jMonth":return a(1);case"jD":case"jDay":return a(2);default:return y.call(this,e,t)}};const D=r.startOf;r.startOf=function(e){let t=this;switch(e){case"jY":case"jYear":t=t.set("jD",1).set("jM",0);case"jM":case"jMonth":return t.set("jD",1).startOf("d");default:return D.call(t,e)}};const m=r.endOf;r.endOf=function(e){let t=this;switch(e){case"jY":case"jYear":t=t.set("jD",1).set("jM",11);case"jM":case"jMonth":return t.set("jD",t.daysInMonth(u)).endOf("d");default:return m.call(t,e)}};const p=r.dayOfYear;r.dayOfYear=function(e){if(e===u){const e=M(this._date),t=e[0];return l(t,e[1],e[2])-l(t,1,1)+1}return p.call(this,e)};const O=r.isLeapYear;r.isLeapYear=function(e){if(e===u){const e=this.year(u);return l(e+1,1,1)-l(e,1,1)>365}return O.call(this,e)};const g=r.weekOfYear;r.weekOfYear=function(e){if(e===u){let e=12-this._weekday;return e>6&&(e-=7),Math.ceil(this.add(e,"d").dayOfYear(u)/7)}return g.call(this,e)};const k=r.format;r.format=function(a=e.FORMAT_DEFAULT){const r=a.replace(/\[.*?\]|jYYYY|jYY|jM{1,4}|jDD?/g,e=>{if(e.indexOf("[")>-1)return e;let a="";switch(e){case"jYY":a=`${this.year(u)}`.slice(2);break;case"jYYYY":a=`${this.year(u)}`;break;case"jM":case"jMM":a=t.padStart(`${this.month(u)+1}`,"jM"===e?1:2,"0");break;case"jMMM":a=j(this._localeName)[this.month(u)].slice(0,3);break;case"jMMMM":a=j(this._localeName)[this.month(u)];break;case"jD":default:a=t.padStart(`${this.day(u)}`,"jD"===e?1:2,"0")}return`[${a}]`});return k.call(this,r)}});