日期操作 日期范围查找周一周日 月初月末 按频率(天数、周,月)分割日期 vue或js

日期找周一及周日

/**
 * 日期==找周一及周日
 * date日期yyyy-mm-dd
 * return {MondayTime:'yyyy-mm-dd',SundayTime:'yyyy-mm-dd'}周一,周末
**/
getCurrentWeekDay(date) {
	let dates = new Date(date);
	
	var datesTime = dates.getTime();
	var day = dates.getDay() || 7; //为周日的时候 day 修改为7  否则当天周天会有问题
	
	var MondayTime = datesTime - (day-1)*(24*60*60*1000) ;//显示周一
	var SundayTime = datesTime + (7-day)*(24*60*60*1000) ;//显示周日
	
	return {
		MondayTime: this.fomatDate(MondayTime),
		SundayTime: this.fomatDate(SundayTime)
	};
},

日期找月初及月末

/**
 * 日期==找月初及月末
 * date日期yyyy-mm-dd
 * return {res_startDate:'yyyy-mm-dd',res_endDate:'yyyy-mm-dd'}月初,月末
**/
getCurrentMonthDay(date){
	let dates = new Date(date);
	let year = dates.getFullYear(); // 2022
	const month = dates.getMonth() + 1; // 0 1 2 3 4 5 6 7 8 9 10 11
	const startDate = new Date(year + '/' + month + '/' + 1);
	let nextMonth = month + 1;
	if (nextMonth === 13) {
		year += 1;
		nextMonth = 1;
	};
	const datesLong = (new Date(year + '/' + nextMonth + '/' + 1)).getTime() - 24 * 60 * 60 * 1000;
	
	var res_startDate = this.fomatDate(startDate);
	
	var res_endDate = this.fomatDate(datesLong);
	
	return { res_startDate, res_endDate };
},

日期范围天数频率分割

/**
 * 日期范围==天数频率==分割
 * startTime开始日期yyyy-mm-dd
 * endTime结束日期yyyy-mm-dd
 * pl天数Number
 * return[{start_time:'yyyy-mm-dd',end_time: 'yyyy-mm-dd'},...]频率起止时间
**/
plDate(startTime,endTime,pl){
	console.log('##########⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇计算开始(按日期)⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇##########')
	
	// 计算时间差及循环
	let start_time = Date.parse(new Date(startTime)); 
	let end_time = Date.parse(new Date(endTime));
	let dateCount = parseInt((end_time - start_time)/ (1000 * 60 * 60 * 24));//核心:时间戳相减,然后除以天数
	let forCount = Math.ceil((dateCount+1)/pl)-1; // 计算循环次数,按频率计算
	
	console.log('开始:',startTime)
	console.log('结束:',endTime)
	console.log('天数(包含结束天):',dateCount+1)
	console.log('频率(有效时间分割):',pl)
	console.log('取余(循环次数):',forCount+1)
	// 结果数组 循环初始值
	var arr = [];
	var for_s_time = '';
	var for_e_time = '';
	for(var i=0; i<=forCount; i++){
		// 循环初始值
		var aa = i == 0 ? 0 : pl;
		var bb = i == 0 ? pl-1 : pl;
		var start_aa_time = i == 0 ? startTime : for_s_time;
		var end_bb_time = i == 0 ? startTime : for_e_time;
		// 自定义条目
		var item = {
			start_time: '',
			end_time: '',
		};
		// 该计划有效期开始日期
		start_aa_time = Date.parse(new Date(start_aa_time))+((60 * 60 * 24 *aa) * 1000);
		
		item.start_time = this.fomatDate(start_aa_time);
		// 该计划有效期结束日期
		end_bb_time = Date.parse(new Date(end_bb_time))+((60 * 60 * 24 *bb) * 1000);
		
		item.end_time = this.fomatDate(end_bb_time);
		
		// 存储本次计算的计划有效期,为下次循环计算做准备
		for_s_time = item.start_time;
		for_e_time = item.end_time;
		// 储存为最后数组
		arr.push(item);
	};
	// 真实计划日期替换计划有效期日期
	arr[arr.length-1].end_time = endTime;
	
	console.log('按日期结果:',arr)
	console.log('##########⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆计算结束(按日期)⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆##########')
	return arr;
},

日期范围周频率分割

/**
 * 日期范围==周频率==分割
 * startTime开始日期yyyy-mm-dd
 * endTime结束日期yyyy-mm-dd
 * pl周频率(一周七天)N周=N*7(例:两周为一个频率即:2周=2*7=14,即:pl=14)
 * return[{start_time:'yyyy-mm-dd',end_time: 'yyyy-mm-dd'},...]频率起止时间
**/
weekDate(startTime,endTime,pl){
	console.log('##########⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇计算开始(按周)⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇##########')
	
	let weekStartDates = this.getCurrentWeekDay(startTime);
	// 该计划开始有效期=周一
	var weekStartFirst = weekStartDates.MondayTime;
	// // 该计划开始有效期=周日
	// var weekStartLast = weekStartDates.SundayTime;
	
	let weekEndDates = this.getCurrentWeekDay(endTime);
	// // 该计划结束有效期=周一
	// var weekEndFirst = weekEndDates.MondayTime;
	// 该计划结束有效期=周日
	var weekEndLast = weekEndDates.SundayTime;
	
	// 结果数组 
	var arr = [];
	arr = this.plDate(weekStartFirst,weekEndLast,pl); // 按日期结算(计划开始日期周的周一,计划结束日期周的周日,周频率(一周七天))
	// 真实计划日期替换计划有效期日期
	arr[0].start_time = startTime;
	arr[arr.length-1].end_time = endTime;
	
	console.log('按周结果:',arr)
	console.log('##########⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆计算结束(按周)⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆##########')
	return arr;
},

日期范围月频率分割

/**
 * 日期范围==月频率==分割
 * startTime开始日期yyyy-mm-dd
 * endTime结束日期yyyy-mm-dd
 * pl月频率,N月=N*1(例:两月为一个频率即:2月=2*1=2,即:pl=2)
 * return[{start_time:'yyyy-mm-dd',end_time: 'yyyy-mm-dd'},...]频率起止时间
**/
monthDate(startTime,endTime,pl){
	console.log('##########⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇计算开始(按周)⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇##########')
	
	// 计算月差及循环
	//用-分成数组
	var date1 = startTime.split("-");
	var date2 = endTime.split("-");
	//获取年,月数
	var year1 = parseInt(date1[0]),
	month1 = parseInt(date1[1]),
	year2 = parseInt(date2[0]),
	month2 = parseInt(date2[1]),
	//通过年,月差计算月份差
	months = (year2 - year1) * 12 + (month2 - month1) + 1;
	
	let dateCount = months;
	let forCount = months-1; // 计算循环次数
	console.log('月差',months)
	console.log('开始:',startTime)
	console.log('结束:',endTime)
	console.log('月数(包含结束月):',dateCount+1)
	console.log('频率(有效时间分割):',pl)
	console.log('取余(循环次数):',forCount+1)
	// 结果数组 循环初始值
	var arr = [];
	var for_s_time = '';
	var for_e_time = '';
	for(var i=0; i<=forCount; i++){
		// 循环初始值
		var aa = i == 0 ? 0 : pl;
		var start_aa_time = i == 0 ? startTime : for_s_time;
		
		// 自定义条目
		var item = {
			start_time: '',
			end_time: '',
		};
		
		var strDate = new Date(start_aa_time);
		var stryear = strDate.getFullYear(); //年
		var strmonth = strDate.getMonth() + 1 + aa; //月
		var strday = strDate.getDate(); //日
		if(strmonth>12){
			// 若月份超出即为第二年
			stryear+=1;
			strmonth-=12;
		};
		
		let monthStartDates = this.getCurrentMonthDay(new Date(stryear+'-'+strmonth+'-'+strday));
		item.start_time = monthStartDates.res_startDate;
		item.end_time = monthStartDates.res_endDate;
		// 存储本次计算的计划有效期,为下次循环计算做准备
		for_s_time = item.start_time;
		for_e_time = item.end_time;
		// 储存为最后数组
		arr.push(item);
	};
	// 真实计划日期替换计划有效期日期
	arr[0].start_time = startTime;
	arr[arr.length-1].end_time = endTime;
	
	console.log('按周结果:',arr)
	console.log('##########⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆计算结束(按周)⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆##########')
	return arr;
},

公共函数日期格式化

// 日期格式化
fomatDate(date) {
	let defVal = date ? new Date(date) : new Date();
	
	let year = defVal.getFullYear();
	let month = defVal.getMonth() + 1;
	let day = defVal.getDate();
	month = month<10?'0'+month:month;
	day = day<10?'0'+day:day;
	let defDate = year + '-' + month + '-' + day;
	
	return defDate;
},
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值