[在此处输入图像描述][1]我需要在一个月内找到第一周、第二周、第三周和第四周(即我们可以说第 N 周(的日期范围。这是一个预订网站,我想在其中提供一个选项,可以创建一个事件,该事件每 N 周的第 N 天重复一次。
例如
- 活动名称 - 为期两天的瑜伽课程
- 开始日期 - 1/六月/2017
- 结束日期 - 2017年7月31日
- 活动日 - 周一和周五
-
重复 - 每两周一次
[1]: https://i.stack.imgur.com/XysBp.png -- 创建事件
[1]: https://i.stack.imgur.com/tN8sE.png -- 图书活动
for (var i = range.start.getTime(), end = range.end.getTime(); i <= end;) {
var first = new Date(i);
var last = new Date(first.getFullYear(), first.getMonth() + 1, 0); // last day of the month
if(item.recurring_type == 'every_week') {
// in case of repetition every week
ranges.push({
start: moment(formatDate(first),'YYYY-MM-DD'),
end: moment(formatDate(last),'YYYY-MM-DD').endOf('month'),
})
} else if(item.recurring_type == 'first_week') {
// 1 to 7
var cus_date_start = new Date(first.getFullYear(), first.getMonth(), 1);
var cus_date_end = new Date(first.getFullYear(), first.getMonth(), 7);
if( cus_date_start.getDate() >= first.getDate() && cus_date_end.getDate() <= last.getDate() ) {
ranges.push({
start: moment(formatDate(cus_date_start),'YYYY-MM-DD'),
end: moment(formatDate(cus_date_end),'YYYY-MM-DD'),
})
}
} else if(item.recurring_type == 'second_week') {
// 8 to 14
var cus_date_start = new Date(first.getFullYear(), first.getMonth(), 8);
var cus_date_end = new Date(first.getFullYear(), first.getMonth(), 14);
if( cus_date_start.getDate() >= first.getDate() && cus_date_end.getDate() <= last.getDate() ) {
ranges.push({
start: moment(formatDate(cus_date_start),'YYYY-MM-DD'),
end: moment(formatDate(cus_date_end),'YYYY-MM-DD'),
})
}
} else if(item.recurring_type == 'third_week') {
// 15 to 21
var cus_date_start = new Date(first.getFullYear(), first.getMonth(), 15);
var cus_date_end = new Date(first.getFullYear(), first.getMonth(), 21);
if( cus_date_start.getDate() >= first.getDate() && cus_date_end.getDate() <= last.getDate() ) {
ranges.push({
start: moment(formatDate(cus_date_start),'YYYY-MM-DD'),
end: moment(formatDate(cus_date_end),'YYYY-MM-DD'),
})
}
} else {
// 22 to end
var cus_date_start = new Date(first.getFullYear(), first.getMonth(), 22);
ranges.push({
start: moment(formatDate(cus_date_start),'YYYY-MM-DD'),
end: moment(formatDate(last),'YYYY-MM-DD').endOf('month'),
})
}
i = last.getTime() + aDay;
}
这是我所做的解决方案,很接近但不准确,如果有人可以改进此代码,请发布您的答案。
谢谢