同周比 日期速查 周一为首日

工作中遇到查询今日是本年的第几周,周几,因公司要周一至周日为一周,所以写了这个小工具。

var DateUtils = {
	// 获取本周是一年中的第几周 周几
	getWeekNumber : function(d) {
		// Copy date so don't modify original
		d = new Date(d);
		d.setHours(0, 0, 0);
		var getDay = d.getDay();
		// Set to nearest Thursday: current date + 4 - current day number
		// 得到本周的星期4,7天,1号周四算第1周
		d.setDate(d.getDate() + 4 - (d.getDay() || 7));
		// Get first day of year
		var yearStart = new Date(d.getFullYear(), 0, 1);
		// Calculate full weeks to nearest Thursday
		// 一天=86400000毫秒
		var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
		// Return array of year and week number
		var getFullYear = d.getFullYear();
		var getWeekNo = weekNo;
		return [ getFullYear, getWeekNo, getDay ];
	},
	// 获取某年某周的起始和截止日期
	getStartAndEndDateByWeek : function(year, week) {
		var Nowdate = new Date(year, 0, 1); // 1月1日
		// Nowdate - ((Nowdate.getDay()||7) - 1)
		var nowweek_start = new Date(Nowdate - (Nowdate.getDay() == 0 ? 6 : (Nowdate.getDay() - 1)) * 86400000); // 周开始时间
		var nowweek = 1;
		var start = new Date(nowweek_start - 86400000 * 7 * (nowweek - week)).format("yyyy-MM-dd");
		var end = new Date(nowweek_start - 86400000 * 7 * (nowweek - week) + 86400000 * 6).format("yyyy-MM-dd");
		return [ start, end ];
	},
	// 获取某日期所在周 周几的日期
	getDateByDateDay : function(d, weekDay) {
		// 0是星期日,1是星期一,...
		weekDay %= 7;
		var nowDate = new Date(d);
		var day = nowDate.getDay();
		var time = nowDate.getTime();
		var sub = weekDay - day;
		if (weekDay == 0 && sub < 0) {
			sub += 7;
		}
		time += sub * 24 * 3600000;
		nowDate.setTime(time);
		return nowDate.format("yyyy-MM-dd");
	},
	// 获取上一年第几周周几的日期
	getLastDateByYwd : function(year, week, day) {
		var lastwr = this.getStartAndEndDateByWeek(year - 1, week);
		var lastDate = new Date(lastwr[0]);
		console.info(lastDate.format("yyyy-MM-dd"));
		lastDate.setDate(lastDate.getDate() + (day == 0 ? 6 : (day - 1)));
		return lastDate.format("yyyy-MM-dd");
	}
}

 

转载于:https://my.oschina.net/u/198423/blog/2250631

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值