JavaScript 实现获取当前时间的周开始日期和周结束日期

JavaScript 实现获取当前时间的周开始日期和周结束日期

实现原理

1.通过Date的getDay()方法获取当前日期所在周的某一天"weekDay"(返回值是 0(周日) 到 6(周六) 之间的一个整数)
2.通过获取的"weekDay"来判断距离每周的开始日期天数的差值,然后通过加减获取周开始日期和周结束日期

实现代码(周一为开始日期,周日为结束日期)

//获取日期周开始日期(周一为每周的开始,周日为每周的结束)
	function beginOfWeek(dateValue) {
		let date;
		if (dateValue instanceof Date) {
			date = dateValue;
		} else {
			date = new Date(dateValue);
		}
		let subDay = 0;
		let weekDay = date.getDay();
		if (weekDay == 0) {
			//周天
			subDay = 6;
		} else {
			subDay = weekDay - 1;
		}
		let beginDateTime = date.getTime() - (86400000 * subDay);
		return new Date(beginDateTime);
	}
	//获取日期周结束日期(周一为每周的开始,周日为每周的结束)
	function endOfWeek(dateValue) {
		let date;
		if (dateValue instanceof Date) {
			date = dateValue;
		} else {
			date = new Date(dateValue);
		}
		let weekDay = date.getDay();
		if (weekDay == 0) {
			//周天
			return date;
		} else {
			let addDay = 7 - weekDay;
			let endDateTime = date.getTime() + (86400000 * addDay);
			return new Date(endDateTime);
		}
	}

扩展

可以通过Date.prototype来扩展Date方法,然后通过new Date().beginOfWeek()调用

实现代码

//周开始日期(周一为每周开始,周日为每周结束)
Date.prototype.beginOfWeek = function() {
	let subDay = 0;
	let weekDay = this.getDay();
	if (weekDay == 0) {
		//周天
		subDay = 6;
	} else {
		subDay = weekDay - 1;
	}
	let beginDateTime = this.getTime() - (86400000 * subDay);
	return new Date(beginDateTime);
}
//周结束日期(周一为每周开始,周日为每周结束)
Date.prototype.endOfWeek = function() {
	let weekDay = this.getDay();
	if (weekDay == 0) {
		//周天
		return this;
	} else {
		let addDay = 7 - weekDay;
		let endDateTime = this.getTime() + (86400000 * addDay);
		return new Date(endDateTime);
	}
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现排除日和节假日,需要先提前定义好节假日的日期列表。下面是一个示例代码: ```javascript // 设置假期开始日期结束日期 const startDate = new Date('2022-01-01'); const endDate = new Date('2022-01-07'); // 设置节假日列表 const holidayList = [ new Date('2022-01-01'), new Date('2022-01-02'), new Date('2022-01-03'), ]; // 计算相差天数 let timeDiff = Math.abs(endDate.getTime() - startDate.getTime()); let diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); // 排除六、日和节假日 let count = 0; for (let date = startDate; date <= endDate; date.setDate(date.getDate() + 1)) { const day = date.getDay(); if (day !== 0 && day !== 6) { const isHoliday = holidayList.some((holiday) => { return ( holiday.getFullYear() === date.getFullYear() && holiday.getMonth() === date.getMonth() && holiday.getDate() === date.getDate() ); }); if (!isHoliday) { count++; } } } console.log(`假期开始日期:${startDate.toLocaleDateString()}`); console.log(`假期结束日期:${endDate.toLocaleDateString()}`); console.log(`假期天数(不包括六、日和节假日):${count} 天`); ``` 运行结果如下: ``` 假期开始日期:2022/1/1 假期结束日期:2022/1/7 假期天数(不包括六、日和节假日):2 天 ``` 需要注意的是,在排除节假日时,可以使用 some 方法遍历节假日列表,判断当前日期是否在节假日列表中出现。同时,需要使用 getFullYear、getMonth 和 getDate 方法获取日期的年、月和日。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值