假定我们是按周一算一周开始。
基本计算应该是算出指定日期在当年的第几天,然后算出这些天换算成周,除以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
}