268 lines
7.2 KiB
JavaScript
268 lines
7.2 KiB
JavaScript
|
const GetDate = {
|
||
|
withData: (num) => {
|
||
|
let param = parseInt(num);
|
||
|
return param < 10 ? '0' + param : '' + param;
|
||
|
},
|
||
|
getTimes(str){
|
||
|
var strs = str.split(' ');
|
||
|
var strs1 = strs[0] ? strs[0].split('-') : '2000-01-01'.split('-');
|
||
|
var strs2 = strs[1] ? strs[1].split(':') : '00:00:00'.split(':');
|
||
|
var year = strs1[0] ? strs1[0] : 2000;
|
||
|
var month = strs1[1] ? strs1[1] : 1;
|
||
|
var day = strs1[2] ? strs1[2] : 1;
|
||
|
var hour = strs2[0] ? strs2[0] : 0;
|
||
|
var minute = strs2[1] ? strs2[1] : 0;
|
||
|
var second = strs2[2] ? strs2[2] : 0;
|
||
|
var newstr = year +'/'+ month +'/'+ day +' '+ hour +':'+ minute +':'+ second;
|
||
|
return new Date(newstr.replace(/-/g,'/')).getTime();
|
||
|
},
|
||
|
getCurrentTimes(time = new Date()){
|
||
|
const date = new Date(time);
|
||
|
const year = date.getFullYear();
|
||
|
const month = date.getMonth() + 1;
|
||
|
const day = date.getDate();
|
||
|
const hour = date.getHours();
|
||
|
const minute = date.getMinutes();
|
||
|
const second = date.getSeconds();
|
||
|
return {
|
||
|
detail: {
|
||
|
year: year,
|
||
|
month: month,
|
||
|
day: day,
|
||
|
hour: hour,
|
||
|
minute: minute,
|
||
|
second: second
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
format(arr){
|
||
|
let curarr = [];
|
||
|
let curarr0 = [];
|
||
|
let str = '';
|
||
|
arr.forEach((cur,index) => {
|
||
|
let o = GetDate.withData(cur);
|
||
|
if(index > 2){
|
||
|
curarr.push(o);
|
||
|
}else{
|
||
|
curarr0.push(o);
|
||
|
}
|
||
|
})
|
||
|
if(arr.length < 4){
|
||
|
str = curarr0.join('-');
|
||
|
}else{
|
||
|
str = curarr0.join('-') + ' ' + curarr.join(':');
|
||
|
}
|
||
|
return str;
|
||
|
},
|
||
|
getCurrentStringValue(str){
|
||
|
let newstr = str.split(' ');
|
||
|
if(newstr && newstr[1]){
|
||
|
let arr = [...newstr[0].split('-'),...newstr[1].split(':')];
|
||
|
return arr;
|
||
|
}
|
||
|
return newstr[0].split('-');
|
||
|
},
|
||
|
getCompare(curp,startp,endp,timesp){
|
||
|
let cur = GetDate.getTimes(curp);
|
||
|
let start = GetDate.getTimes(startp);
|
||
|
let end = GetDate.getTimes(endp);
|
||
|
if(cur < start){
|
||
|
return GetDate.getTimeIndex(timesp,GetDate.getCurrentStringValue(startp));
|
||
|
}else if(cur > end){
|
||
|
return GetDate.getTimeIndex(timesp,GetDate.getCurrentStringValue(endp));
|
||
|
}else{
|
||
|
return GetDate.getTimeIndex(timesp,GetDate.getCurrentStringValue(curp));
|
||
|
}
|
||
|
},
|
||
|
getChooseArr(times,indexs){
|
||
|
let arr = [];
|
||
|
times.forEach((cur,index) => arr.push(cur[indexs[index]]));
|
||
|
return arr;
|
||
|
},
|
||
|
getNewArray(arr){
|
||
|
let newarr = [];
|
||
|
arr.forEach(cur => newarr.push(cur));
|
||
|
return newarr;
|
||
|
},
|
||
|
getLoopArray: (start, end) => {
|
||
|
var start = start || 0;
|
||
|
var end = end || 1;
|
||
|
var array = [];
|
||
|
for (var i = start; i <= end; i++) {
|
||
|
array.push(GetDate.withData(i));
|
||
|
}
|
||
|
return array;
|
||
|
},
|
||
|
getMonthDay: (year, month) => {
|
||
|
var flag = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0), array = null;
|
||
|
|
||
|
switch (month) {
|
||
|
case '01':
|
||
|
case '03':
|
||
|
case '05':
|
||
|
case '07':
|
||
|
case '08':
|
||
|
case '10':
|
||
|
case '12':
|
||
|
array = GetDate.getLoopArray(1, 31)
|
||
|
break;
|
||
|
case '04':
|
||
|
case '06':
|
||
|
case '09':
|
||
|
case '11':
|
||
|
array = GetDate.getLoopArray(1, 30)
|
||
|
break;
|
||
|
case '02':
|
||
|
array = flag ? GetDate.getLoopArray(1, 29) : GetDate.getLoopArray(1, 28)
|
||
|
break;
|
||
|
default:
|
||
|
array = GetDate.getLoopArray(1, 31)
|
||
|
}
|
||
|
return array;
|
||
|
},
|
||
|
getIndependentTimes(opts){
|
||
|
var {
|
||
|
startTimes,
|
||
|
endTimes,
|
||
|
curTimes,
|
||
|
fields
|
||
|
} = opts;
|
||
|
var {
|
||
|
year:startyear = 2021,
|
||
|
month:startmonth = 1,
|
||
|
day:startday = 1,
|
||
|
hour:starthour = 0,
|
||
|
minute:startminute = 0,
|
||
|
second:startsecond = 0
|
||
|
} = startTimes;
|
||
|
var {
|
||
|
year:endyear = 2021,
|
||
|
month:endmonth = 1,
|
||
|
day:endday = 1,
|
||
|
hour:endhour = 0,
|
||
|
minute:endminute = 0,
|
||
|
second:endsecond = 0
|
||
|
} = endTimes;
|
||
|
var {
|
||
|
year:curyear = 2021,
|
||
|
month:curmonth = 1,
|
||
|
day:curday = 1,
|
||
|
hour:curhour = 0,
|
||
|
minute:curminute = 0,
|
||
|
second:cursecond = 0
|
||
|
} = curTimes;
|
||
|
return {
|
||
|
startyear,
|
||
|
startmonth,
|
||
|
startday,
|
||
|
starthour,
|
||
|
startminute,
|
||
|
startsecond,
|
||
|
endyear,
|
||
|
endmonth,
|
||
|
endday,
|
||
|
endhour,
|
||
|
endminute,
|
||
|
endsecond,
|
||
|
curyear,
|
||
|
curmonth,
|
||
|
curday,
|
||
|
curhour,
|
||
|
curminute,
|
||
|
cursecond
|
||
|
}
|
||
|
},
|
||
|
getYears(opts){
|
||
|
var years = GetDate.getLoopArray(opts.startyear, opts.endyear);
|
||
|
return years;
|
||
|
},
|
||
|
getMonths(opts){
|
||
|
var months = GetDate.getLoopArray(1, 12);
|
||
|
if(opts.curyear == opts.startyear){
|
||
|
months = months.filter(cur => cur >= opts.startmonth);
|
||
|
}
|
||
|
if(opts.curyear == opts.endyear){
|
||
|
months = months.filter(cur => cur <= opts.endmonth);
|
||
|
}
|
||
|
return months;
|
||
|
},
|
||
|
getDays(opts){
|
||
|
var days = GetDate.getMonthDay(opts.curyear, GetDate.withData(opts.curmonth));
|
||
|
if(opts.curyear == opts.startyear && opts.curmonth == opts.startmonth){
|
||
|
days = days.filter(cur => cur >= opts.startday);
|
||
|
}
|
||
|
if(opts.curyear == opts.endyear && opts.curmonth == opts.endmonth){
|
||
|
days = days.filter(cur => cur <= opts.endday);
|
||
|
}
|
||
|
return days;
|
||
|
},
|
||
|
getHours(opts){
|
||
|
var hours = GetDate.getLoopArray(0, 23);
|
||
|
if(opts.curyear == opts.startyear && opts.curmonth == opts.startmonth && opts.curday == opts.startday){
|
||
|
hours = hours.filter(cur => cur >= opts.starthour);
|
||
|
}
|
||
|
if(opts.curyear == opts.endyear && opts.curmonth == opts.endmonth && opts.curday == opts.endday){
|
||
|
hours = hours.filter(cur => cur <= opts.endhour);
|
||
|
}
|
||
|
return hours;
|
||
|
},
|
||
|
getMinutes(opts){
|
||
|
var minutes = GetDate.getLoopArray(0, 59);
|
||
|
if(opts.curyear == opts.startyear && opts.curmonth == opts.startmonth && opts.curday == opts.startday && opts.curhour == opts.starthour){
|
||
|
minutes = minutes.filter(cur => cur >= opts.startminute);
|
||
|
}
|
||
|
if(opts.curyear == opts.endyear && opts.curmonth == opts.endmonth && opts.curday == opts.endday && opts.curhour == opts.endhour){
|
||
|
minutes = minutes.filter(cur => cur <= opts.endminute);
|
||
|
}
|
||
|
return minutes;
|
||
|
},
|
||
|
getSeconds(opts){
|
||
|
var seconds = GetDate.getLoopArray(0, 59);
|
||
|
if(opts.curyear == opts.startyear && opts.curmonth == opts.startmonth && opts.curday == opts.startday && opts.curhour == opts.starthour && opts.curminute == opts.startminute){
|
||
|
seconds = seconds.filter(cur => cur >= opts.startsecond);
|
||
|
}
|
||
|
if(opts.curyear == opts.endyear && opts.curmonth == opts.endmonth && opts.curday == opts.endday && opts.curhour == opts.endhour && opts.curminute == opts.endminute){
|
||
|
seconds = seconds.filter(cur => cur <= opts.endsecond);
|
||
|
}
|
||
|
return seconds;
|
||
|
},
|
||
|
getDateTimes: (opts) => {
|
||
|
var alltimes = GetDate.getIndependentTimes(opts);
|
||
|
var years = GetDate.getYears(alltimes);
|
||
|
var months = GetDate.getMonths(alltimes);
|
||
|
var days = GetDate.getDays(alltimes);
|
||
|
var hours = GetDate.getHours(alltimes);
|
||
|
var minutes = GetDate.getMinutes(alltimes);
|
||
|
var seconds = GetDate.getSeconds(alltimes);
|
||
|
var times = {
|
||
|
year: [years],
|
||
|
month: [years, months],
|
||
|
day: [years, months, days],
|
||
|
hour: [years, months, days, hours],
|
||
|
minute: [years, months, days, hours, minutes],
|
||
|
second: [years, months, days, hours, minutes, seconds]
|
||
|
};
|
||
|
return times[opts.fields] || times.second;
|
||
|
},
|
||
|
getIndex(arr,target){
|
||
|
let len = arr.length;
|
||
|
for(let i = 0; i < len; i++){
|
||
|
if(arr[i] == target){
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
getTimeIndex(arrs, targets){
|
||
|
let len = arrs.length;
|
||
|
let arr = [];
|
||
|
for(let i = 0; i < len; i++){
|
||
|
arr.push(GetDate.getIndex(arrs[i], targets[i]))
|
||
|
}
|
||
|
return arr;
|
||
|
},
|
||
|
error(str){
|
||
|
console.error(str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = GetDate;
|