[英]how to find the week start date from number of week count dynamically using moment
[英]How to iterate week number, start/end date of weeks using moment
我怎样才能得到所有week number
, from/to date
?
下面的代码是我构建的用于显示特定月份的week number
, from/to date
的代码,每当我在循环中插入 function 时它都会返回无限循环。
function getISOWeeksInMonth(month, year) {
let weekStart = new Date(year, month - 1, 1);
weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1);
let weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() + 6);
let weekNum = moment(weekStart, "YYYY-MM-DD").week()
let weeks = [];
do {
weeks.push({
weekNum : weekNum++,
start: new Date(weekStart),
end: new Date(weekEnd)
});
weekStart.setDate(weekStart.getDate() + 7);
weekEnd.setDate(weekEnd.getDate() + 7);
} while (weekStart.getMonth() < month);
return weeks;
}
_.forEach(moment.months(), function (month_name) {
var month_number = moment().month(month_name).format("MM");
getISOWeeksInMonth(month_number, 2022).forEach(week => console.log(
'Week : ' + week.weekNum +
'\nStart: ' + week.start.toDateString() +
'\nEnd : ' + week.end.toDateString())
);
})
结果应返回week number
列表, from/to date
样本 Url: https://savvytime.com/week-number/philippines/2022
这是我运行 function 外循环时的示例:
function getISOWeeksInMonth(month, year) { let weekStart = new Date(year, month - 1, 1); weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); let weekNum = moment(weekStart, "YYYY-MM-DD").week() let weeks = []; do { weeks.push({ weekNum: weekNum++, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } while (weekStart.getMonth() < month); return weeks; } getISOWeeksInMonth(1, 2022).forEach(week => console.log( 'Week: ' + week.weekNum + '\nStart: ' + week.start.toDateString() + '\nEnd: ' + week.end.toDateString()) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>
function getISOWeeksInMonth(month, year) { let weekStart = new Date(year, month - 1, 1); weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); let weeks = []; do { let weekNum = moment(weekStart, "YYYY-MM-DD").week() weeks.push({ weekNum: weekNum, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) )); return weeks; } let _ = moment.months() _.forEach(function (month_name) { var month_number = moment().month(month_name).format("MM"); getISOWeeksInMonth(month_number, 2022).forEach(week => console.log( 'Week: ' + week.weekNum + '\nStart: ' + week.start.toDateString() + '\nEnd: ' + week.end.toDateString()) ); })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>
当您计算 12 月(第 12 个月)的周数时,您从前一个月(11 月,即 11 日)的最后一周开始,并且在您的do {...} while
循环中,您将 7 天添加到weekStart
。 到目前为止一切顺利,但是您的while (weekStart.getMonth() < month)
正在检查weekStart.getMonth()
的 0-11 值,当它从 11 向前滚动时,它不会转到 12,而是转到 0。所以它总是小于 12(12 月!)!
您可以通过将while
调整为以下方式来解决此问题:
while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) ))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.