思路1.计算两个日期的星期对应的星期一,比如2022-12-21,也就是星期三,找到对应的星期一日期,也就是2022-12-19,然后减去两者之间的天数得到的两个日期,再除以7,就是两个日期之间的周数。本机日期实现:functiongetDifferWeeksBetweenTwoDates1(str1,str2){//1.转换为日期对象letdate1=newDate(str1);让date2=新日期(str2);//2。从星期计算星期几LetdiffDaysToMon1=date1.getDay()-1;让diffDaysToMon2=date2.getDay()-1;如果(diffDaysToMon1<0){diffDaysToMon1=6;}如果(diffDaysToMon2<0){diffDaysToMon2=6;}//3。获取参考计算日期letreferDateDay1=newDate(date1).setDate(date1.getDate()-diffDaysToMon1);让referDateDay2=newDate(date2).setDate(date2.getDate()-diffDaysToMon2);让diffDays=parseInt(Math.abs(referDateDay1-referDateDay2)/1000/60/60/24);//4。计算周差数letdiffWeeks=diffDays/7;returndiffWeeks;}momentimplementation:functiongetDifferWeeksBetweenTwoDates2(str1,str2){//1.转换为moment对象letmoment1=moment(str1);让moment2=moment(str2);//2。计算一周中的星期一和从一周计算的那一天之间的天数让diffDays1=moment1。格式(“E”)-1;让diffDays2=moment2.format("E")-1;//3。获取参考计算日letreferMoment1=moment1.subtract(diffDays1,"days");让referMoment2=moment2.subtract(diffDays2,"days");//4.计算周差数letdiffWeeks=Math.abs(Math.floor(referMoment1.diff(referMoment2,"days",true)/7));returndiffWeeks;}2.设日期a为x1,与周一相差k1,日期b为x2,与周一相差k2,周一对应的日期分别为y1和y2,天数他们之间是z然后z=x2-k2-(x1-k1)(x2>=x1),z=-1*(x2-k2-(x1-k1))(x2=time2?1:-1)*(diffDays-diffDaysToMon1+diffDaysToMon2);//4。计算周差数letdiffWeeks=referMonDiffDays/7;returndiffWeeks;}testconsttestCase=[["2022-01-01","2022-01-01",0],["2022-01-02","2022-01-04",1],["2022-01-01","2021-12-11",3],["2018-03-12","2015-04-12",153],["2022-12-26","2023-01-03",1],]functiontestCaseFunc(){testCase.forEach(dates=>{const[startDate,endDate,result]=dates;console.assert(getDifferWeeksBetweenTwoDates1(startDate,endDate)===结果,"failed");console.assert(getDifferWeeksBetweenTwoDates2(startDate,endDate)===结果,"failed");console.assert(getDifferWeeksBetweenTwoDates3(startDate,endDate)===result,"failed");})}testCaseFunc();性能比consttestCase=[["2022-01-01","2022-01-01",0],["2022-01-02","2022-01-04",1],["2022-01-01","2021-12-11",3],["2018-03-12","2015-04-12",153],["2022-12-26","2023-01-03",1],]consttestPerformanceCount=10000;functiontestPerformanceFunc(){控制台.time("getDifferWeeksBetweenTwoDates1");for(leti=0;i{const[startDate,endDate]=dates;getDifferWeeksBetweenTwoDates1(startDate,endDate);})}console.timeEnd("getDifferWeeksBetweenTwoDates1");console.time("getDifferWeeksBetweenTwoDates2");for(leti=0;i{const[startDate,endDate]=dates;getDifferWeeksBetweenTwoDates2(startDate,endDate);})}console.timeEnd("getDifferWeeksBetweenTwoDates2");console.time("getDifferWeeksBetweenTwoDates3");for(leti=0;i{const[startDate,endDate]=dates;getDifferWeeksBetweenTwoDates3(startDate,endDate);})}console.timeEnd("getDifferWeeksBetweenTwoDates3");}testPerformanceFunc();使用方法2的话不先计算出两个日期对应的一周,性能比方法1快2倍,如果使用moment,快20倍