aio-date
Advanced tools
Comparing version 4.0.3 to 4.1.0
549
index.js
@@ -1,137 +0,6 @@ | ||
export default function AIODate() { | ||
let $$ = { | ||
isMatch(obj) { | ||
if (!obj || !Array.isArray(obj.matchers) || obj.date === undefined) { | ||
console.error(`AIODate().isMatch should get an object as parameter. {*date:number | string | array,*matchers:array}`, obj) | ||
return false | ||
} | ||
let { date, matchers } = obj; | ||
if (!date) { return false } | ||
if (matchers === true) { return true } | ||
if (matchers === false) { return false } | ||
date = $$.convertToArray({ date }) | ||
let { isLess, isGreater, isEqual } = $$; | ||
for (let i = 0; i < matchers.length; i++) { | ||
let matcher = matchers[i], type, targets; | ||
try { | ||
let a = matcher.split(','); | ||
type = a[0]; | ||
targets = a.slice(1, a.length); | ||
} | ||
catch { return false } | ||
if (type === '<') { for (let i = 0; i < targets.length; i++) { if (isLess(date, targets[i])) { return true } } } | ||
else if (type === '>') { for (let i = 0; i < targets.length; i++) { if (isGreater(date, targets[i])) { return true } } } | ||
else if (type === '<=') { for (let i = 0; i < targets.length; i++) { if (isEqual(date, targets[i])) { return true } if (isLess(date, targets[i])) { return true } } } | ||
else if (type === '>=') { for (let i = 0; i < targets.length; i++) { if (isEqual(date, targets[i])) { return true } if (isGreater(date, targets[i])) { return true } } } | ||
else if (type === '=') { for (let i = 0; i < targets.length; i++) { if (isEqual(date, targets[i])) { return true } } } | ||
else if (type === '!=') { for (let i = 0; i < targets.length; i++) { if (!isEqual(date, targets[i])) { return true } } } | ||
else if (type === '<>') { | ||
if (targets[0] && targets[1]) { | ||
let start, end; | ||
if (isLess(targets[0], targets[1])) { start = targets[0]; end = targets[1]; } | ||
else { start = targets[1]; end = targets[0]; } | ||
if (isGreater(date, start) && isLess(date, end)) { return true } | ||
} | ||
} | ||
else if (type === '<=>') { | ||
if (targets[0] && targets[1]) { | ||
let start, end; | ||
if (isLess(targets[0], targets[1])) { start = targets[0]; end = targets[1]; } | ||
else { start = targets[1]; end = targets[0]; } | ||
if (isGreater(date, start) && isLess(date, end)) { return true } | ||
if (isEqual(date, start) || isEqual(date, end)) { return true } | ||
} | ||
} | ||
else if (type === '!<>') { | ||
if (targets[0] && targets[1]) { | ||
let start, end; | ||
if (isLess(targets[0], targets[1])) { start = targets[0]; end = targets[1]; } | ||
else { start = targets[1]; end = targets[0]; } | ||
if (!isGreater(date, start) || !isLess(date, end)) { return true } | ||
} | ||
} | ||
else if (type === '!<=>') { | ||
if (targets[0] && targets[1]) { | ||
let start, end; | ||
if (isLess(targets[0], targets[1])) { start = targets[0]; end = targets[1]; } | ||
else { start = targets[1]; end = targets[0]; } | ||
if (!isEqual(date, start) && !isEqual(date, end) && (isLess(date, start) || isGreater(date, end))) { return true } | ||
} | ||
} | ||
else if (type === 'w') { | ||
let w = $$.getWeekDay({ date }).index; | ||
for (let i = 0; i < targets.length; i++) { if (w === +targets[i]) { return true } } | ||
} | ||
else if (type === '!w') { | ||
let w = $$.getWeekDay({ date }).index; | ||
for (let i = 0; i < targets.length; i++) { if (w !== +targets[i]) { return true } } | ||
} | ||
} | ||
return false | ||
}, | ||
getSplitter(value) { | ||
let splitter = '/'; | ||
for (let i = 0; i < value.length; i++) { | ||
if (isNaN(parseInt(value[i]))) { return value[i] } | ||
} | ||
return splitter; | ||
}, | ||
convertToArray(obj) { | ||
if (!obj || obj.date === undefined) { | ||
console.error(` | ||
export default function e(){let e={isMatch(t){if(!t||!Array.isArray(t.matchers)||void 0===t.date)return console.error("AIODate().isMatch should get an object as parameter. {*date:number | string | array,*matchers:array}",t),!1;let{date:r,matchers:a}=t;if(!r)return!1;if(!0===a)return!0;if(!1===a)return!1;r=e.convertToArray({date:r});let{isLess:n,isGreater:o,isEqual:i}=e;for(let g=0;g<a.length;g++){let l=a[g],s,$;try{let _=l.split(",");s=_[0],$=_.slice(1,_.length)}catch{break}if("<"===s){for(let d=0;d<$.length;d++)if(n(r,$[d]))return!0}else if(">"===s){for(let u=0;u<$.length;u++)if(o(r,$[u]))return!0}else if("<="===s){for(let y=0;y<$.length;y++)if(i(r,$[y])||n(r,$[y]))return!0}else if(">="===s){for(let f=0;f<$.length;f++)if(i(r,$[f])||o(r,$[f]))return!0}else if("="===s){for(let D=0;D<$.length;D++)if(i(r,$[D]))return!0}else if("!="===s){for(let h=0;h<$.length;h++)if(!i(r,$[h]))return!0}else if("<>"===s){if($[0]&&$[1]){let p,c;if(n($[0],$[1])?(p=$[0],c=$[1]):(p=$[1],c=$[0]),o(r,p)&&n(r,c))return!0}}else if("<=>"===s){if($[0]&&$[1]){let m,T;if(n($[0],$[1])?(m=$[0],T=$[1]):(m=$[1],T=$[0]),o(r,m)&&n(r,T)||i(r,m)||i(r,T))return!0}}else if("!<>"===s){if($[0]&&$[1]){let A,M;if(n($[0],$[1])?(A=$[0],M=$[1]):(A=$[1],M=$[0]),!o(r,A)||!n(r,M))return!0}}else if("!<=>"===s){if($[0]&&$[1]){let b,v;if(n($[0],$[1])?(b=$[0],v=$[1]):(b=$[1],v=$[0]),!i(r,b)&&!i(r,v)&&(n(r,b)||o(r,v)))return!0}}else if("w"===s){let O=e.getWeekDay({date:r}).index;for(let j=0;j<$.length;j++)if(O===+$[j])return!0}else if("!w"===s){let x=e.getWeekDay({date:r}).index;for(let L=0;L<$.length;L++)if(x!==+$[L])return!0}}return!1},getSplitter(e){for(let t=0;t<e.length;t++)if(isNaN(parseInt(e[t])))return e[t];return"/"},convertToArray(t){if(!t||void 0===t.date)return console.error(` | ||
AIODate().convertToArray should get an object as parameter. | ||
{ | ||
*date:number | string | array | ||
}`, obj) | ||
return false | ||
} | ||
let { date } = obj; | ||
if (!date) { return [] } | ||
if (Array.isArray(date)) { return [...date] } | ||
else if (typeof date === 'string') { | ||
let list; | ||
if (date.indexOf("T") !== -1) { | ||
//"2015-03-25T12:00:00Z" | ||
let [d, t] = date.split("T"); | ||
t = t.split(".")[0]; | ||
t = t.split(':'); | ||
d = d.split('-'); | ||
list = d.concat(t, 0) | ||
} | ||
else { | ||
list = date.split($$.getSplitter(date)); | ||
} | ||
return list.map((date) => parseInt(date)) | ||
} | ||
else if (typeof date === 'number') { | ||
let d = new Date(date); | ||
let year = d.getFullYear(); | ||
let month = d.getMonth() + 1; | ||
let day = d.getDate(); | ||
let hour = d.getHours(); | ||
let minute = d.getMinutes(); | ||
let second = d.getSeconds(); | ||
let miliseconds = d.getMilliseconds(); | ||
let tenthsecond = Math.round(miliseconds / 100); | ||
return [year, month, day, hour, minute, second, tenthsecond] | ||
} | ||
else if (typeof date === 'object') { | ||
if(typeof date.year === 'number'){return [date.year,date.month,date.day,date.hour]} | ||
else { | ||
let year = date.getFullYear(); | ||
let month = date.getMonth() + 1; | ||
let day = date.getDate(); | ||
let hour = date.getHours(); | ||
let minute = date.getMinutes(); | ||
let second = date.getSeconds(); | ||
let miliseconds = date.getMilliseconds(); | ||
let tenthsecond = Math.round(miliseconds / 100); | ||
return [year, month, day, hour, minute, second, tenthsecond] | ||
} | ||
} | ||
else { return false } | ||
}, | ||
toJalali(obj) { | ||
if (!obj || obj.date === undefined) { | ||
console.error(` | ||
}`,t),!1;let{date:r,jalali:a}=t;if(!r)return!1;let n;if(Array.isArray(r))n=[...r];else if("string"==typeof r){if(-1!==r.indexOf("T")){let[o,i]=r.split("T");i=(i=i.split(".")[0]).split(":"),n=(o=o.split("-")).concat(i,0)}else n=r.split(e.getSplitter(r));n=n.map(e=>parseInt(e))}else if("number"==typeof r){let g=new Date(r),l=g.getFullYear(),s=g.getMonth()+1,$=g.getDate(),_=g.getHours(),d=g.getMinutes(),u=g.getSeconds(),y;n=[l,s,$,_,d,u,Math.round(g.getMilliseconds()/100)]}else{if("object"!=typeof r)return!1;if("number"==typeof r.year)return[r.year,r.month,r.day,r.hour];{let f=r.getFullYear(),D=r.getMonth()+1,h=r.getDate(),p=r.getHours(),c=r.getMinutes(),m=r.getSeconds(),T;n=[f,D,h,p,c,m,Math.round(r.getMilliseconds()/100)]}}if(a){let[A,M,b]=e.toJalali({date:[n[0],n[1],n[2]]});n[0]=A,n[1]=M,n[2]=b}return n},toJalali(t){var r,a,n,o,i,g;if(!t||void 0===t.date)return console.error(` | ||
AIODate().toJalali should get an object as parameter. | ||
@@ -141,24 +10,3 @@ { | ||
pattern:string (example: {year}/{month}/{day}) | ||
}`, obj) | ||
return false | ||
} | ||
if (!obj.date) { return } | ||
let arr = $$.convertToArray({ date: obj.date }); | ||
let calendarType = $$.getCalendarType(arr); | ||
if (calendarType === 'jalali') { return arr } | ||
let [gy, gm, gd] = arr; | ||
var g_d_m, jy, jm, jd, gy2, days; | ||
g_d_m = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; | ||
gy2 = (gm > 2) ? (gy + 1) : gy; | ||
days = 355666 + (365 * gy) + ~~((gy2 + 3) / 4) - ~~((gy2 + 99) / 100) + ~~((gy2 + 399) / 400) + gd + g_d_m[gm - 1]; | ||
jy = -1595 + (33 * ~~(days / 12053)); days %= 12053; jy += 4 * ~~(days / 1461); days %= 1461; | ||
if (days > 365) { jy += ~~((days - 1) / 365); days = (days - 1) % 365; } | ||
if (days < 186) { jm = 1 + ~~(days / 31); jd = 1 + (days % 31); } else { jm = 7 + ~~((days - 186) / 30); jd = 1 + ((days - 186) % 30); } | ||
arr[0] = jy; arr[1] = jm; arr[2] = jd; | ||
if (obj.pattern) { return $$.pattern(arr, obj.pattern) } | ||
return arr; | ||
}, | ||
toGregorian(obj) { | ||
if (!obj || obj.date === undefined) { | ||
console.error(` | ||
}`,t),!1;if(!t.date)return;let l=e.convertToArray({date:t.date});if("jalali"===e.getCalendarType(l))return l;let[s,$,_]=l;return(r=[0,31,59,90,120,151,181,212,243,273,304,334],i=$>2?s+1:s,a=-1595+33*~~((g=355666+365*s+~~((i+3)/4)-~~((i+99)/100)+~~((i+399)/400)+_+r[$-1])/12053),g%=12053,a+=4*~~(g/1461),(g%=1461)>365&&(a+=~~((g-1)/365),g=(g-1)%365),g<186?(n=1+~~(g/31),o=1+g%31):(n=7+~~((g-186)/30),o=1+(g-186)%30),l[0]=a,l[1]=n,l[2]=o,t.pattern)?e.pattern(l,t.pattern):l},toGregorian(t){var r,a,n,o,i;if(!t||void 0===t.date)return console.error(` | ||
AIODate().toGregorian should get an object as parameter. | ||
@@ -168,26 +16,3 @@ { | ||
pattern:string (example: {year}/{month}/{day}) | ||
}`, obj) | ||
return false | ||
} | ||
if (!obj.date) { return } | ||
let arr = $$.convertToArray({ date: obj.date }); | ||
let calendarType = $$.getCalendarType(arr); | ||
if (calendarType === 'gregorian') { return arr } | ||
let [jy, jm, jd] = arr; | ||
var sal_a, gy, gm, gd, days; | ||
jy += 1595; days = -355668 + (365 * jy) + (~~(jy / 33) * 8) + ~~(((jy % 33) + 3) / 4) + jd + ((jm < 7) ? (jm - 1) * 31 : ((jm - 7) * 30) + 186); | ||
gy = 400 * ~~(days / 146097); days %= 146097; | ||
if (days > 36524) { gy += 100 * ~~(--days / 36524); days %= 36524; if (days >= 365) days++; } | ||
gy += 4 * ~~(days / 1461); days %= 1461; | ||
if (days > 365) { gy += ~~((days - 1) / 365); days = (days - 1) % 365; } | ||
gd = days + 1; | ||
sal_a = [0, 31, ((gy % 4 === 0 && gy % 100 !== 0) || (gy % 400 === 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; | ||
for (gm = 0; gm < 13 && gd > sal_a[gm]; gm++) gd -= sal_a[gm]; | ||
arr[0] = gy; arr[1] = gm; arr[2] = gd; | ||
if (obj.pattern) { return $$.pattern(arr, obj.pattern) } | ||
return arr; | ||
}, | ||
compaire(obj) { | ||
if (!obj || obj.date === undefined || obj.otherDate === undefined) { | ||
console.error(` | ||
}`,t),!1;if(!t.date)return;let g=e.convertToArray({date:t.date});if("gregorian"===e.getCalendarType(g))return g;let[l,s,$]=g;for(l+=1595,a=400*~~((i=-355668+365*l+8*~~(l/33)+~~((l%33+3)/4)+$+(s<7?(s-1)*31:(s-7)*30+186))/146097),(i%=146097)>36524&&(a+=100*~~(--i/36524),(i%=36524)>=365&&i++),a+=4*~~(i/1461),(i%=1461)>365&&(a+=~~((i-1)/365),i=(i-1)%365),o=i+1,r=[0,31,a%4==0&&a%100!=0||a%400==0?29:28,31,30,31,30,31,31,30,31,30,31],n=0;n<13&&o>r[n];n++)o-=r[n];return(g[0]=a,g[1]=n,g[2]=o,t.pattern)?e.pattern(g,t.pattern):g},compaire(t){if(!t||void 0===t.date||void 0===t.otherDate)return console.error(` | ||
AIODate().compaire should get an object as parameter. | ||
@@ -199,65 +24,7 @@ { | ||
and returns 'greater' | 'less' | 'equal' | ||
`, obj) | ||
return false | ||
} | ||
let { date, otherDate } = obj; | ||
if (!date || !otherDate) { return } | ||
let arr1 = $$.convertToArray({ date }); | ||
let arr2 = $$.convertToArray({ date: otherDate }); | ||
for (let i = 0; i < arr1.length; i++) { | ||
let a = arr1[i]; | ||
let b = arr2[i] || 0; | ||
if (a < b) { return 'less' } | ||
if (a > b) { return 'greater' } | ||
} | ||
return 'equal'; | ||
}, | ||
getToCompaire(o1, o2) { | ||
o1 = $$.convertToArray({ date: o1 }); | ||
o2 = $$.convertToArray({ date: o2 }); | ||
for (let i = 0; i < o1.length; i++) { if (isNaN(o2[i])) { o2[i] = o1[i] } } | ||
return { date: o1, otherDate: o2 } | ||
}, | ||
isLess(o1, o2) { | ||
if (!o1 || !o2) { return false } | ||
return $$.compaire($$.getToCompaire(o1, o2)) === 'less' | ||
}, | ||
isEqual(o1, o2) { | ||
if (!o1 || !o2) { return false } | ||
return $$.compaire($$.getToCompaire(o1, o2)) === 'equal' | ||
}, | ||
isGreater(o1, o2) { | ||
if (!o1 || !o2) { return false } | ||
return $$.compaire($$.getToCompaire(o1, o2)) === 'greater' | ||
}, | ||
isBetween(o1, [o2, o3]) { | ||
if (!o1 || !o2 || !o3) { return false } | ||
return $$.isGreater(o1, o2) && $$.isLess(o1, o3) | ||
}, | ||
getTime(obj) { | ||
if (!obj || obj.date === undefined) { | ||
console.error(` | ||
`,t),!1;let{date:r,otherDate:a}=t;if(!r||!a)return;let n=e.convertToArray({date:r}),o=e.convertToArray({date:a});for(let i=0;i<n.length;i++){let g=n[i],l=o[i]||0;if(g<l)return"less";if(g>l)return"greater"}return"equal"},getToCompaire(t,r){t=e.convertToArray({date:t}),r=e.convertToArray({date:r});for(let a=0;a<t.length;a++)isNaN(r[a])&&(r[a]=t[a]);return{date:t,otherDate:r}},isLess:(t,r)=>!!t&&!!r&&"less"===e.compaire(e.getToCompaire(t,r)),isEqual:(t,r)=>!!t&&!!r&&"equal"===e.compaire(e.getToCompaire(t,r)),isGreater:(t,r)=>!!t&&!!r&&"greater"===e.compaire(e.getToCompaire(t,r)),isBetween:(t,[r,a])=>!!t&&!!r&&!!a&&e.isGreater(t,r)&&e.isLess(t,a),getTime(t){if(!t||void 0===t.date)return console.error(` | ||
AIODate().getTime should get an object as parameter. | ||
{ | ||
*date:number | string | array , | ||
}`, obj) | ||
return false | ||
} | ||
let { date, calendarType } = obj; | ||
if (!date) { return } | ||
calendarType = calendarType || $$.getCalendarType(date); | ||
if (typeof date === 'number') { return date } | ||
date = $$.convertToArray({ date }); | ||
let [year, month = 1, day = 1, hour = 0, minute = 0, second = 0, tenthsecond = 0] = date; | ||
if (calendarType === 'jalali') { date = $$.toGregorian({ date: [year, month, day, hour, minute, second, tenthsecond] }) } | ||
let time = new Date(date[0], date[1] - 1, date[2]).getTime() | ||
time += hour * 60 * 60 * 1000; | ||
time += minute * 60 * 1000; | ||
time += second * 1000; | ||
time += tenthsecond * 100; | ||
return time; | ||
}, | ||
getNextTime(obj) { | ||
if (!obj || obj.date === undefined || isNaN(obj.offset)) { | ||
console.error(` | ||
}`,t),!1;let{date:r,calendarType:a}=t;if(!r)return;if(a=a||e.getCalendarType(r),"number"==typeof r)return r;let[n,o=1,i=1,g=0,l=0,s=0,$=0]=r=e.convertToArray({date:r});"jalali"===a&&(r=e.toGregorian({date:[n,o,i,g,l,s,$]}));let _=new Date(r[0],r[1]-1,r[2]).getTime();return _+=36e5*g,_+=6e4*l,_+=1e3*s,_+=100*$},getNextTime(t){if(!t||void 0===t.date||isNaN(t.offset))return console.error(` | ||
AIODate().getNextTime should get an object as parameter. | ||
@@ -269,30 +36,3 @@ { | ||
pattern:string (example: {year}/{month}/{day}) | ||
}`, obj) | ||
return false | ||
} | ||
let { date, offset, pattern } = obj; | ||
if (!offset || !date) { return date } | ||
let calendarType = $$.getCalendarType(date); | ||
let time = $$.getTime({ date, calendarType }); | ||
time += offset; | ||
time = $$.convertToArray({ date: time }); | ||
if (calendarType === 'jalali' || obj.jalali) { | ||
let [jy, jm, jd] = $$.toJalali({ date: time }); | ||
time[0] = jy; time[1] = jm; time[2] = jd; | ||
} | ||
if (pattern) { return $$.pattern(time, pattern) } | ||
return time; | ||
}, | ||
GetMonthDaysLength: { | ||
jalali: (year, month) => { | ||
if (month <= 6) { return 31; } | ||
if (month <= 11) { return 30; } | ||
if ([1, 5, 9, 13, 17, 22, 26, 30].indexOf(year % 33) === -1) { return 29; } | ||
return 30; | ||
}, | ||
gregorian: (year, month) => { return new Date(year, month - 1, 0).getDate(); } | ||
}, | ||
getMonthDaysLength(obj) { | ||
if (!obj || obj.date === undefined) { | ||
console.error(` | ||
}`,t),!1;let{date:r,offset:a,pattern:n}=t;if(!a||!r)return r;let o=e.getCalendarType(r),i=e.getTime({date:r,calendarType:o});if(i+=a,i=e.convertToArray({date:i}),"jalali"===o||t.jalali){let[g,l,s]=e.toJalali({date:i});i[0]=g,i[1]=l,i[2]=s}return n?e.pattern(i,n):i},GetMonthDaysLength:{jalali:(e,t)=>t<=6?31:t<=11?30:-1===[1,5,9,13,17,22,26,30].indexOf(e%33)?29:30,gregorian:(e,t)=>new Date(e,t-1,0).getDate()},getMonthDaysLength(t){if(!t||void 0===t.date)return console.error(` | ||
AIODate().getMonthDaysLength should get an object as parameter. | ||
@@ -302,83 +42,8 @@ { | ||
} | ||
`, obj) | ||
return false | ||
} | ||
let { date } = obj; | ||
if (!date) { return } | ||
let [year, month] = $$.convertToArray({ date }); | ||
return $$.GetMonthDaysLength[$$.getCalendarType([year, month])](year, month) | ||
}, | ||
getCalendarType(date) { | ||
return $$.convertToArray({ date })[0] < 1700 ? 'jalali' : 'gregorian' | ||
}, | ||
getWeekDay(obj) { | ||
if (!obj || !obj.date) { | ||
console.error(`AIODate().getWeekDay should get an object as parameter. {*date:string | array}`, obj) | ||
return false | ||
} | ||
let date = $$.convertToArray({ date: obj.date }); | ||
let calendarType = $$.getCalendarType(date); | ||
date = $$.toGregorian({ date }) | ||
let index = new Date(date[0], date[1] - 1, date[2]).getDay(); | ||
if (calendarType === 'jalali') { | ||
index += 1; | ||
index = index % 7; | ||
} | ||
return { weekDay: $$.getWeekDays({ calendarType })[index], index }; | ||
}, | ||
getDaysOfWeek(obj) { | ||
if (!obj || !obj.date) { | ||
console.error(`AIODate().getDaysOfWeek should get an object as parameter. {*date:string | array}`, obj) | ||
return false | ||
} | ||
let { index } = $$.getWeekDay({ date: obj.date }); | ||
let startDate = $$.getNextTime({ date: [obj.date[0], obj.date[1], obj.date[2]], offset: -(index + 1) * 24 * 60 * 60 * 1000 }); | ||
let endDate = $$.getNextTime({ date: [obj.date[0], obj.date[1], obj.date[2]], offset: (7 - index) * 24 * 60 * 60 * 1000 }); | ||
return $$.getDatesBetween({ date: startDate, otherDate: endDate, pattern: obj.pattern, step: 24 * 60 * 60 * 1000 }) | ||
}, | ||
getDaysOfMonth(obj) { | ||
if (!obj || !obj.date) { | ||
console.error(`AIODate().getLastDayOfMonth should get an object as parameter. {*date:string | array}`, obj) | ||
return false | ||
} | ||
let date = $$.convertToArray({ date: obj.date }); | ||
let firstDay = [date[0], date[1], 1]; | ||
let lastDay = $$.getLastDayOfMonth({ date }) | ||
let betweenDayes = $$.getDatesBetween({ date: firstDay, otherDate: lastDay, step: 24 * 60 * 60 * 1000 }); | ||
let result = [firstDay]; | ||
result = result.concat(betweenDayes); | ||
result.push(lastDay); | ||
if (obj.pattern) { | ||
return result.map((o) => $$.getDateByPattern({ date: o, pattern: obj.pattern })) | ||
} | ||
return result; | ||
}, | ||
getLastDayOfMonth(obj) { | ||
if (!obj || !obj.date) { | ||
console.error(`AIODate().getLastDayOfMonth should get an object as parameter. {*date:string | array}`, obj) | ||
return false | ||
} | ||
let date = $$.convertToArray({ date: obj.date }); | ||
let length = $$.getMonthDaysLength({ date }); | ||
let lastDay = [date[0], date[1], length]; | ||
if (obj.pattern) { | ||
return $$.getDateByPattern({ date: lastDay, pattern: obj.pattern }) | ||
} | ||
return lastDay | ||
}, | ||
getWeekDays({ calendarType }) { | ||
return { | ||
jalali: ['شنبه', 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه'], | ||
gregorian: ['SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY'] | ||
}[calendarType] | ||
}, | ||
getMonths({ calendarType }) { | ||
return { | ||
jalali: ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند',], | ||
gregorian: ['JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER'] | ||
}[calendarType] | ||
}, | ||
getDatesBetween(obj) { | ||
if (!obj || obj.date === undefined || obj.otherDate === undefined) { | ||
console.error(` | ||
`,t),!1;let{date:r}=t;if(!r)return;let[a,n]=e.convertToArray({date:r});return e.GetMonthDaysLength[e.getCalendarType([a,n])](a,n)},getYearDaysLength(t){if(!t||void 0===t.date)return console.error(` | ||
AIODate().getYearDaysLength should get an object as parameter. | ||
{ | ||
*date:number | string | array | ||
} | ||
`,t),!1;let{date:r}=t;if(!r)return;let[a]=e.convertToArray({date:r}),n=0;for(let o=1;o<=12;o++)n+=e.getMonthDaysLength({date:[a,o]});return n},getCalendarType:t=>e.convertToArray({date:t})[0]<1700?"jalali":"gregorian",getWeekDay(t){if(!t||!t.date)return console.error("AIODate().getWeekDay should get an object as parameter. {*date:string | array}",t),!1;let r=e.convertToArray({date:t.date}),a=e.getCalendarType(r);r=e.toGregorian({date:r});let n=new Date(r[0],r[1]-1,r[2]).getDay();return"jalali"===a&&(n+=1,n%=7),{weekDay:e.getWeekDays({calendarType:a})[n],index:n}},getDaysOfWeek(t){if(!t||!t.date)return console.error("AIODate().getDaysOfWeek should get an object as parameter. {*date:string | array}",t),!1;let{index:r}=e.getWeekDay({date:t.date}),a=e.getNextTime({date:[t.date[0],t.date[1],t.date[2]],offset:-(864e5*(r+1))}),n=e.getNextTime({date:[t.date[0],t.date[1],t.date[2]],offset:(7-r)*864e5});return e.getDatesBetween({date:a,otherDate:n,pattern:t.pattern,step:864e5})},getDaysOfMonth(t){if(!t||!t.date)return console.error("AIODate().getLastDayOfMonth should get an object as parameter. {*date:string | array}",t),!1;let r=e.convertToArray({date:t.date}),a=[r[0],r[1],1],n=e.getLastDayOfMonth({date:r}),o=e.getDatesBetween({date:a,otherDate:n,step:864e5}),i=[a];return((i=i.concat(o)).push(n),t.pattern)?i.map(r=>e.getDateByPattern({date:r,pattern:t.pattern})):i},getLastDayOfMonth(t){if(!t||!t.date)return console.error("AIODate().getLastDayOfMonth should get an object as parameter. {*date:string | array}",t),!1;let r=e.convertToArray({date:t.date}),a=e.getMonthDaysLength({date:r}),n=[r[0],r[1],a];return t.pattern?e.getDateByPattern({date:n,pattern:t.pattern}):n},getWeekDays:({calendarType:e})=>({jalali:["شنبه","یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه"],gregorian:["SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"]})[e],getMonths:({calendarType:e})=>({jalali:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند",],gregorian:["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"]})[e],getDatesBetween(t){if(!t||void 0===t.date||void 0===t.otherDate)return console.error(` | ||
AIODate().getDatesBetween should get an object as parameter. | ||
@@ -390,102 +55,3 @@ { | ||
pattern:string (example '{year/{month}/{day}}') | ||
}`) | ||
return false; | ||
} | ||
let { date, otherDate, step = 24 * 60 * 60 * 1000, pattern } = obj; | ||
date = $$.convertToArray({ date: date }); | ||
otherDate = $$.convertToArray({ date: otherDate }); | ||
if (!$$.isGreater(otherDate, date)) { return [] } | ||
let length = $$.getDelta({ date, otherDate }).miliseconds / step; | ||
if (isNaN(length) || length > 1000) { | ||
console.error('AIODate().getDatesBetween() => too many dates'); | ||
return; | ||
} | ||
let nextDate = $$.getNextTime({ date, offset: step }); | ||
let res = []; | ||
while ($$.isLess(nextDate, otherDate)) { | ||
if (pattern) { | ||
res.push($$.pattern(nextDate, pattern)); | ||
} | ||
else { | ||
res.push(nextDate); | ||
} | ||
nextDate = $$.getNextTime({ date: nextDate, offset: step }); | ||
} | ||
return res | ||
}, | ||
getToday(obj) { | ||
if (!obj || ['jalali', 'gregorian'].indexOf(obj.calendarType) === -1) { | ||
console.error(`AIODate().getToday should get an object as parameter. {*calendarType:'gregorian' | 'jalali',pattern:string}`) | ||
return false; | ||
} | ||
let date = new Date(); | ||
date = [date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), Math.round(date.getMilliseconds() / 100)] | ||
if (obj.calendarType === 'jalali') { date = $$.toJalali({ date }) } | ||
if (obj.pattern) { return $$.pattern(date, obj.pattern) } | ||
return date; | ||
}, | ||
getDateByPattern(obj) { | ||
if (!obj || !obj.date || typeof obj.pattern !== 'string') { | ||
console.error(`AIODate().getDateByPattern should get an object as parameter. {*date:number | string | array,*pattern:string}`) | ||
return false; | ||
} | ||
let { date, pattern } = obj | ||
return $$.pattern(date, pattern) | ||
}, | ||
pattern(date, pattern) { | ||
date = $$.convertToArray({ date }); | ||
let [year, month, day, hour, minute, second, tenthsecond] = date; | ||
let calendarType = $$.getCalendarType(date); | ||
pattern = pattern.replace('{year}', year); | ||
if(typeof month === 'number'){pattern = pattern.replace('{month}', $$.get2Digit(month));} | ||
if(typeof day === 'number'){pattern = pattern.replace('{day}', $$.get2Digit(day));} | ||
if(typeof hour === 'number'){pattern = pattern.replace('{hour}', $$.get2Digit(hour));} | ||
if(typeof minute === 'number'){pattern = pattern.replace('{minute}', $$.get2Digit(minute));} | ||
if(typeof second === 'number'){pattern = pattern.replace('{second}', $$.get2Digit(second));} | ||
if(typeof tenthsecond === 'number'){pattern = pattern.replace('{tenthsecond}', $$.get2Digit(tenthsecond));} | ||
if (pattern.indexOf('{monthString}') !== -1) { | ||
pattern = pattern.replace('{monthString}', $$.getMonths({ calendarType })[month - 1]); | ||
} | ||
if (pattern.indexOf('{weekDay}') !== -1) { | ||
let weekDays = $$.getWeekDays({ calendarType }); | ||
let { index } = $$.getWeekDay({ date }); | ||
pattern = pattern.replace('{weekDay}', weekDays[index]); | ||
} | ||
return pattern | ||
}, | ||
convertMiliseconds({miliseconds = 0,unit = 'day',pattern}) { | ||
let type; | ||
if(miliseconds < 0){type = 'passed'; miliseconds = -miliseconds} | ||
else if(miliseconds > 0){type = 'remaining'} | ||
else {type = 'now'} | ||
let index = ['day','hour','minute','second','tenthsecond','milisecond'].indexOf(unit); | ||
let day = 0, hour = 0, minute = 0,second = 0, tenthsecond = 0; | ||
let dif = miliseconds; | ||
if(index <= 0){ | ||
day = Math.floor(dif / (24 * 60 * 60 * 1000)); | ||
dif -= day * (24 * 60 * 60 * 1000); | ||
} | ||
if(index <= 1){ | ||
hour = Math.floor(dif / (60 * 60 * 1000)); | ||
dif -= hour * (60 * 60 * 1000); | ||
} | ||
if(index <= 2){ | ||
minute = Math.floor(dif / (60 * 1000)); | ||
dif -= minute * (60 * 1000); | ||
} | ||
if(index <= 3){ | ||
second = Math.floor(dif / (1000)); | ||
dif -= second * (1000); | ||
} | ||
if(index <= 4){ | ||
tenthsecond = Math.floor(dif / (100)); | ||
} | ||
if (pattern) { | ||
return $$.pattern([0, 0, day, hour, minute, second, tenthsecond], pattern) | ||
} | ||
return { day, hour, minute, second, tenthsecond, miliseconds,type } | ||
}, | ||
getDelta(obj) { | ||
if (!obj || !obj.date) { | ||
console.error(` | ||
}`),!1;let{date:r,otherDate:a,step:n=864e5,pattern:o}=t;if(r=e.convertToArray({date:r}),a=e.convertToArray({date:a}),!e.isGreater(a,r))return[];let i=e.getDelta({date:r,otherDate:a}).miliseconds/n;if(isNaN(i)||i>1e3){console.error("AIODate().getDatesBetween() => too many dates");return}let g=e.getNextTime({date:r,offset:n}),l=[];for(;e.isLess(g,a);)o?l.push(e.pattern(g,o)):l.push(g),g=e.getNextTime({date:g,offset:n});return l},getToday(t){if(!t||-1===["jalali","gregorian"].indexOf(t.calendarType))return console.error("AIODate().getToday should get an object as parameter. {*calendarType:'gregorian' | 'jalali',pattern:string}"),!1;let r=new Date;return(r=[r.getFullYear(),r.getMonth()+1,r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds(),Math.round(r.getMilliseconds()/100)],"jalali"===t.calendarType&&(r=e.toJalali({date:r})),t.pattern)?e.pattern(r,t.pattern):r},getDateByPattern(t){if(!t||!t.date||"string"!=typeof t.pattern)return console.error("AIODate().getDateByPattern should get an object as parameter. {*date:number | string | array,*pattern:string}"),!1;let{date:r,pattern:a,jalali:n}=t;return e.pattern(r,a,n)},pattern(t,r,a){let[n,o,i,g,l,s,$]=t=e.convertToArray({date:t,jalali:a}),_=e.getCalendarType(t);if(r=r.replace("{year}",n),"number"==typeof o&&(r=r.replace("{month}",e.get2Digit(o))),"number"==typeof i&&(r=r.replace("{day}",e.get2Digit(i))),"number"==typeof g&&(r=r.replace("{hour}",e.get2Digit(g))),"number"==typeof l&&(r=r.replace("{minute}",e.get2Digit(l))),"number"==typeof s&&(r=r.replace("{second}",e.get2Digit(s))),"number"==typeof $&&(r=r.replace("{tenthsecond}",e.get2Digit($))),-1!==r.indexOf("{monthString}")&&(r=r.replace("{monthString}",e.getMonths({calendarType:_})[o-1])),-1!==r.indexOf("{weekDay}")){let d=e.getWeekDays({calendarType:_}),{index:u}=e.getWeekDay({date:t});r=r.replace("{weekDay}",d[u])}return r},convertMiliseconds({miliseconds:t=0,unit:r="day",pattern:a}){let n;t<0?(n="passed",t=-t):n=t>0?"remaining":"now";let o=["day","hour","minute","second","tenthsecond","milisecond"].indexOf(r),i=0,g=0,l=0,s=0,$=0,_=t;return(o<=0&&(i=Math.floor(_/864e5),_-=864e5*i),o<=1&&(g=Math.floor(_/36e5),_-=36e5*g),o<=2&&(l=Math.floor(_/6e4),_-=6e4*l),o<=3&&(s=Math.floor(_/1e3),_-=1e3*s),o<=4&&($=Math.floor(_/100)),a)?e.pattern([0,0,i,g,l,s,$],a):{day:i,hour:g,minute:l,second:s,tenthsecond:$,miliseconds:t,type:n}},getDelta(t){if(!t||!t.date)return console.error(` | ||
AIODate().getDelta should get an object as parameter. | ||
@@ -497,87 +63,2 @@ { | ||
unit:'day' | 'hour' | 'minute' | 'second' | 'tenthsecond' | 'milisecond' | ||
}`) | ||
return false; | ||
} | ||
let { date, otherDate = new Date().getTime(), pattern,unit } = obj; | ||
let dif = $$.getTime({ date }) - $$.getTime({ date: otherDate }); | ||
return $$.convertMiliseconds({miliseconds:-dif,unit,pattern}) | ||
}, | ||
getByOffset({ date, offset, unit = 'day', calendarType = 'gregorian' }) { | ||
if (!offset) { return date } | ||
let fn = $$['get' + (offset > 0 ? 'Next' : 'Prev') + { 'hour': 'Hour', 'day': 'Day', 'month': 'Month', 'year': 'Year' }[unit]]; | ||
let abs = Math.abs(offset); | ||
for (let i = 0; i < abs; i++) { date = fn(date, calendarType); } | ||
return date; | ||
}, | ||
getNextYear([year, month]) { | ||
return [year + 1, month, 1, 0] | ||
}, | ||
getPrevYear([year, month]) { | ||
return [year - 1, month, 1, 0] | ||
}, | ||
getNextHour([year, month, day, hour], calendarType) { | ||
if (hour < 23) { return [year, month, day, hour + 1] } | ||
let a = $$.getNextDay([year, month, day], calendarType); | ||
return [a[0], a[1], a[2], 0] | ||
}, | ||
getPrevHour([year, month, day, hour], calendarType) { | ||
if (hour > 0) { return [year, month, day, hour - 1] } | ||
let a = $$.getPrevDay([year, month, day], calendarType); | ||
return [a[0], a[1], a[2], 23] | ||
}, | ||
getNextDay([year, month, day, hour]) { | ||
if (day < $$.getMonthDaysLength({ date: [year, month] })) { return [year, month, day + 1, hour] } | ||
if (month < 12) { return [year, month + 1, 1, hour] } | ||
return [year + 1, 1, 1, hour]; | ||
}, | ||
getPrevDay([year, month, day, hour], calendarType) { | ||
if (day > 1) { return [year, month, day - 1] } | ||
if (month > 1) { | ||
month -= 1; | ||
day = $$.getMonthDaysLength({ date: [year, month] }); | ||
return [year, month, day, hour]; | ||
} | ||
year -= 1; | ||
month = 12; | ||
day = $$.getMonthDaysLength({ date: [year, month] }); | ||
return [year, month, day, hour]; | ||
}, | ||
getNextMonth([year, month, day, hour]) { return month < 12 ? [year, month + 1, day, hour] : [year + 1, 1, 1]; }, | ||
getPrevMonth([year, month, day, hour]) { return month > 1 ? [year, month - 1, day, hour] : [year - 1, 12, 1]; }, | ||
get2Digit(n) { | ||
let ns; | ||
try{ns = n.toString()} | ||
catch{return n} | ||
if (ns.length === 1) { ns = '0' + n } | ||
return ns | ||
} | ||
} | ||
return { | ||
getDaysOfWeek: $$.getDaysOfWeek, | ||
getDaysOfMonth: $$.getDaysOfMonth, | ||
getLastDayOfMonth: $$.getLastDayOfMonth, | ||
getByOffset: $$.getByOffset, | ||
toJalali: $$.toJalali, | ||
toGregorian: $$.toGregorian, | ||
getTime: $$.getTime, | ||
getSplitter: $$.getSplitter, | ||
convertToArray: $$.convertToArray, | ||
compaire: $$.compaire, | ||
isEqual: $$.isEqual, | ||
isGreater: $$.isGreater, | ||
getDelta: $$.getDelta, | ||
convertMiliseconds:$$.convertMiliseconds, | ||
isLess: $$.isLess, | ||
isBetween: $$.isBetween, | ||
getMonthDaysLength: $$.getMonthDaysLength, | ||
getWeekDay: $$.getWeekDay, | ||
getWeekDays: $$.getWeekDays, | ||
getMonths: $$.getMonths, | ||
getToday: $$.getToday, | ||
isMatch: $$.isMatch, | ||
getNextTime: $$.getNextTime, | ||
getDatesBetween: $$.getDatesBetween, | ||
getDateByPattern: $$.getDateByPattern, | ||
get2Digit:$$.get2Digit | ||
} | ||
} | ||
}`),!1;let{date:r,otherDate:a=new Date().getTime(),pattern:n,unit:o}=t,i=e.getTime({date:r})-e.getTime({date:a});return e.convertMiliseconds({miliseconds:-i,unit:o,pattern:n})},getByOffset({date:t,offset:r,unit:a="day",calendarType:n="gregorian"}){if(!r)return t;let o=e["get"+(r>0?"Next":"Prev")+({hour:"Hour",day:"Day",month:"Month",year:"Year"})[a]],i=Math.abs(r);for(let g=0;g<i;g++)t=o(t,n);return t},getNextYear:([e,t])=>[e+1,t,1,0],getPrevYear:([e,t])=>[e-1,t,1,0],getNextHour([t,r,a,n],o){if(n<23)return[t,r,a,n+1];let i=e.getNextDay([t,r,a],o);return[i[0],i[1],i[2],0]},getPrevHour([t,r,a,n],o){if(n>0)return[t,r,a,n-1];let i=e.getPrevDay([t,r,a],o);return[i[0],i[1],i[2],23]},getNextDay:([t,r,a,n])=>a<e.getMonthDaysLength({date:[t,r]})?[t,r,a+1,n]:r<12?[t,r+1,1,n]:[t+1,1,1,n],getPrevDay:([t,r,a,n],o)=>a>1?[t,r,a-1]:r>1?(r-=1,a=e.getMonthDaysLength({date:[t,r]}),[t,r,a,n]):(t-=1,r=12,a=e.getMonthDaysLength({date:[t,r]}),[t,r,a,n]),getDayIndex({date:t,unit:r}){if(t=e.convertToArray({date:t}),"week"===r){let a=e.getDaysOfWeek({date:t});for(let n=0;n<a.length;n++){let[o,i,g]=a[n];if(o===t[0]&&i===t[1]&&g===t[2])return n}}if("month"===r)return t[2]-1;if("year"===r){let l=0;for(let s=0;s<t[1]-1;s++)l+=e.getMonthDaysLength({date:t});return(l+=t[1])-1}},getNextMonth:([e,t,r,a])=>t<12?[e,t+1,r,a]:[e+1,1,1],getPrevMonth:([e,t,r,a])=>t>1?[e,t-1,r,a]:[e-1,12,1],get2Digit(e){let t;try{t=e.toString()}catch{return e}return 1===t.length&&(t="0"+e),t}};return{getDaysOfWeek:e.getDaysOfWeek,getDaysOfMonth:e.getDaysOfMonth,getLastDayOfMonth:e.getLastDayOfMonth,getByOffset:e.getByOffset,getDayIndex:e.getDayIndex,toJalali:e.toJalali,toGregorian:e.toGregorian,getTime:e.getTime,getSplitter:e.getSplitter,convertToArray:e.convertToArray,compaire:e.compaire,isEqual:e.isEqual,isGreater:e.isGreater,getDelta:e.getDelta,convertMiliseconds:e.convertMiliseconds,isLess:e.isLess,isBetween:e.isBetween,getMonthDaysLength:e.getMonthDaysLength,getYearDaysLength:e.getYearDaysLength,getWeekDay:e.getWeekDay,getWeekDays:e.getWeekDays,getMonths:e.getMonths,getToday:e.getToday,isMatch:e.isMatch,getNextTime:e.getNextTime,getDatesBetween:e.getDatesBetween,getDateByPattern:e.getDateByPattern,get2Digit:e.get2Digit}}; |
{ | ||
"name": "aio-date", | ||
"version": "4.0.3", | ||
"version": "4.1.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
24435
90
1