【发布时间】:2019-12-23 08:20:33
【问题描述】:
我收到一个开始日期和结束日期,我想提取这两个日期之间的所有日期,但仅限于指定的工作日。
我写了一个小代码来计算日期之间“星期二、星期三和星期五”的日期:
start_date = "2019-12-31"
end_date = "2020-01-31"
它工作正常,但问题是它从“2020 年 7 月 1 日星期二”开始计算,我想从“2019 年 12 月 31 日星期二”开始计算日期。代码如下:
function nextWeekdayDate(date, day_in_week) {
var ret = new Date(date || new Date());
ret.setDate(ret.getDate() + (day_in_week - 1 - ret.getDay() + 7) % 7 + 1);
return ret;
}
var delivery_dates = []
var day_num = { "Mon": 1, "Tue": 2, "Wed": 3, "Thu": 4, "Fri": 5 };
var days_of_week = ["Tue", "Wed", "Fri"];
start_date = new Date('2019-12-31');
end_date = new Date('2020-01-31');
var new_dates = []
while (start_date < end_date) {
for (var i = 0; i <= 2; i++) {
start_date = nextWeekdayDate(start_date, day_num[days_of_week[i]]);
delivery_dates.push(start_date)
}
}
console.log(delivery_dates);
知道我的代码有什么问题吗?这是一个jsfiddle: https://jsfiddle.net/mpe49hun/8/
【问题讨论】:
-
ret.setDate(ret.getDate() + ((day_in_week - 1 - ret.getDay() + 7) % 7 + 1) % 7);似乎可以修复它(额外的 %7)... 或者更好的ret.setDate(ret.getDate() + ((day_in_week - 1 - ret.getDay() + 7) + 1) % 7);- 可能有更好的方法来洗牌以获得更简洁的代码 -
@JaromandaX 非常感谢。它确实解决了问题。可以解释一下为什么吗?您也可以将您的评论作为 anwser 发布,我会接受它作为解决方案。
-
ret.setDate(ret.getDate() + ((7 + day_in_week - ret.getDay())) % 7);也这样做 -
解释...您在第一次调用函数时添加 7 天...而不是 0,因为 start_date 是星期二
-
如果您期望上述... jsfiddle.net/h9g1e72m - 更简单的代码,是的
标签: javascript