Javascript 一年有几个星期

Javascript 一年有几个星期,javascript,momentjs,Javascript,Momentjs,Moment js有一个函数可以获取一个月的天数: 但是,我找不到一个函数来查找一年中的iso周数(52或53)。在一年的最后一天使用iso周来获取周数,例如: function weeksInYear(year) { return Math.max( moment(new Date(year, 11, 31)).isoWeek() , moment(new Date(year, 11, 31-7)).isoWeek() ); } 这是一

Moment js有一个函数可以获取一个月的天数:


但是,我找不到一个函数来查找一年中的iso周数(52或53)。

在一年的最后一天使用iso周来获取周数,例如:

function weeksInYear(year) {
   return Math.max(
            moment(new Date(year, 11, 31)).isoWeek()
          , moment(new Date(year, 11, 31-7)).isoWeek()
   );
}

这是一个不依赖于图书馆的答案。它使用一个函数来计算所需年份的12月31日所在年份的周数。如果周数为1(即12月31日在下一年的第一周),则会将日数移低,直到获得不同的值,这将是所需年份的最后一周

函数getWeekNumber(d){ //复制日期,以便不修改原始日期 d=新日期(+d); d、 设定小时数(0,0,0,0); //设置为最近的星期四:当前日期+4-当前天数 //把星期天定为第七天 d、 设置日期(d.getDate()+4-(d.getDay()| 7)); //一年中的第一天 var yearStart=新日期(d.getFullYear(),0,1); //计算整周到最近的星期四 var weekNo=Math.ceil(((d-年初)/86400000)+1)/7) //返回年和周数的数组 return[d.getFullYear(),weekNo]; } 功能周数年(年){ var月=11, 第31天, 周; //查找12月31日所在的周。如果是第一周,则将日期缩短到 //前一周。 做{ d=新日期(年、月、日--); week=getWeekNumber(d)[1]; }而(周=1); 返回周; } [2015年、2016年、2029年,新日期().getFullYear()].forEach(年份=> log(${year}有${weeksInYear(year)}周`) );将weeksInYear和isoWeeksInYear函数添加到moment.js中

因此,今天您可以使用
moment().isoWeeksInYear()
moment().weeksInYear()


如需了解更多信息,请参见《获取一年中该周的所有周和时段》(可能对其感兴趣)

函数getWeekPeriodsInYear(年){ 周=[]; //获得一年中的第一天和最后一天 当前日期=时刻([年,1])。开始日期('年'); dayOfWeek=时刻(currentDay).day(); 最后一天=时刻([年,1])。结束('年'); weeksInYear=时刻(`${year}-01-01`)。isoWeeksInYear(); daysToAdd=7——每周的dayOfWeek; 对于(让weekNumber=1;weekNumber document.write(`Week${period.weekNumber}从${moment(period.start).format('DD-MM-yyyyy')}到${moment(period.end.)。format('DD-MM-yyyyy')}
`) );
当12月31日是次年的第1周时会发生什么?更新答案。感谢12月28日总是在一年中的最后一周,因此您可以简单地获得该日期的ISO周。比do循环简单的方法是简单地减去7。@ScottSauyet更简单的是,如果12月31日在第一周,则一年有52周,否则53.:-)