假定我们是按周一算一周开始。
基本计算应该是算出指定日期在当年的第几天,然后算出这些天换算成周,除以7,向下取整+1
比如 当周7号,7-1 = 6 ,6/7=0 余 6
这里涉及到的就是开始日期和结束日期,这样才能算出日期差。
但如果当年元旦并非周一,那上面的结论就不行了,至少第七天已经是第二周了。那就起始日期再往前,找到元旦那一周的周一,算出结束日期到起始日期的天数除以7
这样梳理一下就是:
输入:日期
得出:日期所在的元旦的日期和星期,算出当周的周一
计算:日期-周一得到天数,Math.floor(天数/7)+1
function getMondayDate(date){
const currentDay = date.getDay();
const target = new Date(date);
if(currentDay===0){
target.setDate(target.getDate()-6)
}else{
target.setDate(target.getDate()+1-currentDay)
}
return target;
}
function getFirstDate(date){
const year = date.getFullYear();
const target = new Date(year, 0, 1)
return target
}
function getWeekNo(date){
const firstWeekMonday = getMondayDate(getFirstDate(date))
const timeDiff = date.getTime() - firstWeekMonday.getTime();
const days = Math.floor(timeDiff/1000/60/60/24);
return Math.floor(days/7)+1
}