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; 
 |