繁体   English   中英

如何获取所有周的开始日期和结束日期

[英]How to get all the weeks start date and end date

我们如何获得当月的所有周开始日期和结束日期?

下面的代码仅显示当前周开始日期和结束日期

 var startOfWeek = moment().startOf("isoWeek").toDate(); var endOfWeek = moment().endOf("isoWeek").toDate(); console.log(startOfWeek) console.log(endOfWeek)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.0/moment.min.js" integrity="sha512-Izh34nqeeR7/nwthfeE0SI3c8uhFSnqxV0sI9TvTcXiFJkMd6fB644O64BRq2P/LA/+7eRvCw4GmLsXksyTHBg==" crossorigin="anonymous"></script>

只需在当月添加/减去 7 天即可获得以下和前几周。

let current = startOfWeek;

do {
  current = current.subtract(7, "days");  //or .add(7, "days") to get next week
} while (current.month() === startOfWeek.month())

这有趣吗? - 不使用片刻

不确定您想从 1 号之前开始或在下个月结束的几周做什么

 const d = new Date(), month = d.getMonth(), yyyy = d.getFullYear(), end = new Date(yyyy,month+1,0).getDate(); const startEnd = Array.from(Array(end+1).keys()).slice(1) .reduce((acc,day) => { const d = new Date(yyyy,month,day,15,0,0,0); if (d.getDay() === 1) acc.push({start:d}); else if (d.getDay() === 6 && acc[acc.length-1]) acc[acc.length-1]["end"] = d; return acc },[]) console.log(startEnd)

这个问题提到了 ISO 周,所以我猜你想要一年中属于当月的任何 ISO 周。 您可以通过获取本月的 1 日,设置为前一个星期一(如果是星期一,则设置为同一天),然后迭代数周直到下个月来实现。 例如

 // Month is calendar month number function getISOWeeksInMonth(month = new Date().getMonth() + 1, year = new Date().getFullYear()) { // Start at 1st of month let weekStart = new Date(year, month - 1, 1); // Set to prior Monday weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); // Get end of week let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); // Get week number of 1st week let weekNum = getWeekNumber(weekStart)[1]; // Create weeks array let weeks = []; while (weekStart.getMonth() < month) { weeks.push({ weekNum : weekNum++, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } return weeks; } // Get ISO week number - from https://stackoverflow.com/a/6117889/257182 function getWeekNumber(d) { d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())); d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7)); var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)); var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7); return [d.getUTCFullYear(), weekNo]; } // ISO weeks of current month getISOWeeksInMonth().forEach(week => console.log( 'Week : ' + week.weekNum + '\\nStart: ' + week.start.toDateString() + '\\nEnd : ' + week.end.toDateString()) ); // ISO weeks in Feb 2021 (starts on a Monday) getISOWeeksInMonth(2, 2021).forEach(week => console.log( 'Week : ' + week.weekNum + '\\nStart: ' + week.start.toDateString() + '\\nEnd : ' + week.end.toDateString()) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM