UNPKG

carbonjs

Version:

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

1 lines 4.75 kB
"use strict";const t=require("../constants"),e=require("../utils"),a=require("./utils/calendars"),i=require("./leap-year"),s=require("./day-of-year"),n=require("./week-of-year"),r=(t,e,a)=>a+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+1948439.5-1,c=t=>(t=>{t=Math.floor(t)+.5;const e=Math.floor((30*(t-1948439.5)+10646)/10631),a=Math.min(12,Math.ceil((t-(29+r(e,1,1)))/29.5)+1);return[e,a,t-r(e,a,1)+1]})(a.gregorian_to_jd(t.getFullYear(),t.getMonth()+1,t.getDate())),l=(t,e,i)=>a.jd_to_gregorian(r(t,e,i)),M={en:"Muharram_Safar_Rabi' al-Awwal_Rabi' al-Thani_Jumada al-Ula_Jumada al-Alkhirah_Rajab_Sha’ban_Ramadhan_Shawwal_Thul-Qi’dah_Thul-Hijjah".split("_"),ar:"ٱلْمُحَرَّم_صَفَر_رَبِيع ٱلْأَوَّل_رَبِيع ٱلْآخِر_جُمَادَىٰ ٱلْأُولَىٰ_جُمَادَىٰ ٱلْآخِرَة_رَجَب_شَعْبَان_رَمَضَان_شَوَّال_ذُو ٱلْقَعْدَة_ذُو ٱلْحِجَّة".split("_")},h={en:"Muh_Saf_Rab-I_Rab-II_Jum-I_Jum-II_Raj_Sha_Ram_Shw_Dhu-Q_Dhu-H".split("_"),ar:"ٱلْمُحَرَّم_صَفَر_رَبِيع ۱_رَبِيع ۲_جُمَادَىٰ ۱_جُمَادَىٰ ۲_رَجَب_شَعْبَان_رَمَضَان_شَوَّال_ذُو ٱلْقَعْدَة_ذُو ٱلْحِجَّة".split("_")},o=t=>M[t]||M.en,u=t=>h[t]||h.en;module.exports=(a=>{a.extend(s),a.extend(i),a.extend(n);const M=a.prototype,h=M._parseToken;M._parseToken=function(t,a,i,s){const n=((t,a)=>{const i=e.newDate(),s=+(t.YYYY||(t.YY?`${i.getFullYear()}`.slice(0,2)+t.YY:i.getFullYear()));let n=t.MM||t.M;if(n)n=+n-1;else{const e=a.months,s=a.monthsShort||e.map(t=>t.slice(0,3));n=t.MMMM?e.indexOf(t.MMMM):t.MMM?s.indexOf(t.MMM):i.getMonth()}const r=+(t.DD||t.D||i.getDate()),M=c(e.newDate(s,n,r)),h=+(t.iYYYY||(t.iYY?`${M[0]}`.slice(0,2)+t.iYY:M[0]));let _=t.iMM||t.iM;_=_?+_-1:t.iMMMM?o(a.name).indexOf(t.iMMMM):t.iMMM?u(a.name).indexOf(t.iMMM):M[1]-1;const d=+(t.iDD||t.iD||M[2]),f=l(h,_+1,d);return f[1]-=1,f})(s,this._locale);switch(t){case"iYY":case"iYYYY":i[0]=n[0],i[1]=i[1]||n[1],i[2]=i[2]||n[2];break;case"iM":case"iMM":case"iMMM":case"iMMMM":i[0]=i[0]||n[0],i[1]=n[1],i[2]=i[2]||n[2];break;case"iD":case"iDD":i[0]=i[0]||n[0],i[1]=i[1]||n[1],i[2]=n[2];break;default:h.call(this,t,a,i,s)}};const _=M.year;M.year=function(t){return"islamic"===t?c(this._date)[0]:_.call(this,t)};const d=M.month;M.month=function(t){return"islamic"===t?c(this._date)[1]-1:d.call(this,t)};const f=M.day;M.day=function(t){return"islamic"===t?c(this._date)[2]:f.call(this,t)};const Y=M.daysInMonth;M.daysInMonth=function(t){if("islamic"===t){let t=this.startOf("iM").add(1,"iM").diff(this.startOf("iM"),"d")-1;return 28===t&&(t=30),t}return Y.call(this,t)};const m=M.add;M.add=function(t,e){switch(e){case"iY":case"iYear":return this.set("iY",this.year("islamic")+ +t);case"iM":case"iMonth":return this.set("iM",this.month("islamic")+ +t);default:return m.call(this,t,e)}};const D=M.set;M.set=function(t,e){const a=t=>(function(t,e){const a=c(this._date);1===t?(a[0]+=Math.floor(e/12),a[1]=e%12+1):a[t]=e;const i=l.apply(0,a);return this.set("d",1).set("y",i[0]).set("M",i[1]-1).set("d",i[2])}).call(this,t,e);switch(t){case"iY":case"iYear":return a(0);case"iM":case"iMonth":return a(1);case"iD":case"iDay":return a(2);default:return D.call(this,t,e)}};const y=M.startOf;M.startOf=function(t){let e=this;switch(t){case"iY":case"iYear":e=e.set("iD",1).set("iM",0);case"iM":case"iMonth":return e.set("iD",1).startOf("d");default:return y.call(e,t)}};const O=M.endOf;M.endOf=function(t){let e=this;switch(t){case"iY":case"iYear":e=e.set("iD",1).set("iM",11);case"iM":case"iMonth":return e.set("iD",e.daysInMonth("islamic")).endOf("d");default:return O.call(e,t)}};const p=M.dayOfYear;M.dayOfYear=function(t){if("islamic"===t){const t=c(this._date),e=t[0];return r(e,t[1],t[2])-r(e,1,1)+1}return p.call(this,t)};const w=M.isLeapYear;M.isLeapYear=function(t){return"islamic"===t?(11*this.year("islamic")+14)%30<11:w.call(this,t)};const k=M.weekOfYear;M.weekOfYear=function(t){if("islamic"===t){let t=12-this._weekday;return t>6&&(t-=7),Math.ceil(this.add(t,"d").dayOfYear("islamic")/7)}return k.call(this,t)};const b=M.format;M.format=function(a=t.FORMAT_DEFAULT){const i=a.replace(/\[.*?\]|iYYYY|iYY|iM{1,4}|iDD?/g,t=>{if(t.indexOf("[")>-1)return t;let a="";switch(t){case"iYY":a=`${this.year("islamic")}`.slice(2);break;case"iYYYY":a=`${this.year("islamic")}`;break;case"iM":case"iMM":a=e.padStart(`${this.month("islamic")+1}`,"iM"===t?1:2,"0");break;case"iMMM":a=u(this._localeName)[this.month("islamic")];break;case"iMMMM":a=o(this._localeName)[this.month("islamic")];break;case"iD":default:a=e.padStart(`${this.day("islamic")}`,"iD"===t?1:2,"0")}return`[${a}]`});return b.call(this,i)}});