记录解决获取日期为当年第几周问题,之所以记录周数的运算,而不是月,是因为周存在跨年特性:
通常一年第一周和最后一周都会出现跨年现象。程序在不允许两年出现重叠周的情况下,会约定以周四所在日期的年份为主,即周四的日期为哪一周,则这周归属于哪一年。比如2019-12-30 ~ 2020-1-5 按中国习惯周一为第一天,该日期为19年而周日5号为20年,此时以周四2020-1-2所在年份为主,所以该周应该归属在2020年第一周。
常用方法
// 获取日期所在周为一年第几周 假设每周周一为第一天
function getWeekIndex(d) {
// 截掉时分秒保留整数天
var date = new Date((d || new Date()).toLocaleDateString());
// 设置日期为当前周周四
date.setDate(date.getDate() + (4 - (date.getDay()||7)));
var year = date.getFullYear();
var firstDate = new Date(year, 0, 1);
firstDate.setDate(firstDate.getDate() + (4 - (firstDate.getDay()||7)));
// 当年第一天早于周四 第一周延后七天
if (firstDate.getFullYear() < year) {
firstDate.setDate(firstDate.getDate() + 7);
}
// 计算当前周和第一周之间周数差
return Math.ceil(((date - firstDate) / 86400000 + 1) / 7 );
}
网友评论