起因

	今天收到需求要实现一个获取当前时间前一个月的日期,前两个月,前三个月,前一年,前两年日期时间的需求
	于是我就去网上找了个帖子,按照他给的方法小改一下,废话不多说直接上代码【注意目前不支持往后的时间日期,可以参考我这个来加shi山】

语法

this.getXmonthToday(-1) //获取当前时间前1个月的日期 2022-1124 获取到的是2022-10-24

this.getXmonthToday(-6) //获取当前时间前0个月的日期

this.getXmonthToday(-10) //获取当前时间前10个月的日期

this.getXmonthToday(-12) //获取当前时间前一年的日期

this.getXmonthToday(-24) //获取当前时间前两年的日期

this.getXmonthToday(-25) //获取当前时间前两年零一个月的日期 20022-110-24 获取到的是 2022-11-24

源码

封装方法

getXmonthToday(type) {
			// type 0 是当天 -1 是上个月   1是下个月
			var now = new Date(); // 可以传值调式 now = new Date(2019,2,30); 今天是3月30号
			var year = now.getFullYear(); //getYear()+1900=getFullYear()
			var month = now.getMonth() + 1; //0-11表示1-12月
			var day = now.getDate(); // 当天日期
			if (parseInt(month) < 10) {
				month = '0' + month;
			}
			if (parseInt(day) < 10) {
				day = '0' + day;
			}
			now = year + '-' + month + '-' + day; // 如果取当月日期可直接 return 返回

			let msum = Math.abs(type);

			// console.log(parseInt(msum / 12))

			var preMonth = 0; //月值

			let preSizes = 0; //上月总天数

			if (parseInt(msum / 12) === 1) {
				//一年
				// console.log("一整年")
				preMonth = parseInt(month);

				if (parseInt(month) === 12) {
					preSizes = new Date(year - 1, parseInt(month), 0).getDate();
					if (day > preSizes) {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + preSizes)
						return parseInt(year) - 1 + '-' + preMonth + '-' + preSizes;
					} else {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + day)
						return parseInt(year) - 1 + '-' + preMonth + '-' + day;
					}
				} else {
					// console.log("********")
					preSizes = new Date(year - 1, parseInt(month), 0).getDate();
					// console.log(preSizes)
					preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值
					if (parseInt(day) > preSizes) {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + preSizes)
						return parseInt(year) - 1 + '-' + preMonth + '-' + preSizes;
					} else {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + day)
						return parseInt(year) - 1 + '-' + preMonth + '-' + day;
					}
				}
			} else if (parseInt(msum / 12) > 1) {
				//两年,三年
				// console.log("两年")

				preMonth = parseInt(month);

				if (parseInt(month) === 12) {
					// console.warn(preMonth)
					preSizes = new Date(year - 1, parseInt(month), 0).getDate();
					if (day > preSizes) {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + preSizes)
						return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + preSizes;
					} else {
						// console.warn(parseInt(year) - 1 + '-'+ preMonth +'-' + day)
						return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + day;
					}
				} else {
					// console.log("********")
					preSizes = new Date(year - parseInt(msum / 12), parseInt(month), 0).getDate();
					// console.log(preSizes)

					// console.log(Math.abs(msum) % 12)
					if (Math.abs(msum) % 12 === 0) {
						// console.log("整年")
						preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值

						if (parseInt(day) > preSizes) {
							// console.warn(parseInt(year) - parseInt(msum / 12)  + '-'+ preMonth +'-' + preSizes)
							return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + preSizes;
						} else {
							// console.warn(parseInt(year) - parseInt(msum / 12)  + '-'+ preMonth +'-' + day)
							return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + day;
						}
					} else {
						// console.log(Math.abs(msum) % 12)
						// console.log("两年多")
						preMonth = parseInt(preMonth - (Math.abs(msum) % 12));

						preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值
						if (parseInt(day) > preSizes) {
							// console.warn(parseInt(year) - parseInt(msum / 12)  + '-'+ preMonth +'-' + preSizes)
							return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + preSizes;
						} else {
							// console.warn(parseInt(year) - parseInt(msum / 12)  + '-'+ preMonth +'-' + day)
							return parseInt(year) - parseInt(msum / 12) + '-' + preMonth + '-' + day;
						}
					}
				}

				// return parseInt(year) - parseInt(msum / 12) + '-'+ preMonth +'-' + preSizes;
			} else {
				//小于一年
		
				if (parseInt(month) === msum) {
					
					preMonth = parseInt(month) + 1;
					preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值
					preSizes = new Date(year - 1, parseInt(month), 0).getDate();
					if (day > preSizes) {
						return parseInt(year) - 1 + '-' + preMonth + '-' + preSizes;
					} else {
						console.warn(parseInt(year) - 1 + '-' + preMonth + '-' + day);
						return parseInt(year) - 1 + '-' + preMonth + '-' + day;
					}
				} else {
					preSizes = new Date(year, parseInt(month), 0).getDate();
					
					if(parseInt(month) > msum){
						preMonth = parseInt(month) - msum;	
					}else if(parseInt(month) === msum){
						year = Number(year) - 1;
						preMonth = 12;
					}else{
						year = Number(year) - 1;
						preMonth = 12 - (msum - parseInt(month))
					}
					preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值
					if (day > preSizes) {
						return parseInt(year) + '-' + preMonth + '-' + preSizes;
					} else {
						return parseInt(year) + '-' + preMonth + '-' + day;
					}
				}
			}
		},


程序员必备技能

有bug勿喷,可以再品论区回复

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐