如果在所需的一周中找不到,我怎样才能想出一种算法来找出工作日的下一个出现时间。例如,以下是日历的屏幕截图。 4 月
第一周没有星期二
。我需要知道如果不在给定的一周内,我该如何去参加下周的下一个星期二
?
下面是我的算法,它可以很好地获取任意一周的选定工作日。我只想在其中添加两个条件,以便在给定周中不存在工作日的情况下来回迭代。
for(var ind=0; ind<=between.length; ind++){
if (new Date(between[ind]).getMonthWeek() === baseDtWk && new Date(between[ind]).getDay() === baseDtD) {
datesToBeMarked.push(between[ind]);
console.log(" :Date: " + between[ind] + " :Week: " + new Date(between[ind]).getMonthWeek());
console.log("Date entered : " + new Date(between[ind]));
}
}
在上面的代码中 baseDtWk
和 baseDtD
包含星期和日期。
周是1到5
之间的整数。
Day 是 0 到 6
之间的整数,表示从 sun
到 sat
的工作日。
for-loop
迭代所有数组元素并将元素推送到另一个数组中,该数组在一个月中具有相同的周和工作日。因此,理想情况下,它可以在工作日的每个时间都可用的快乐场景中实现目的。与上述情况不同。任何想法、指导都将非常感激。谢谢。
最佳答案
通过查看您的代码,您似乎已经有了适当的结构,只需要知道如何使用它即可。
我将稍微修改一下你的 if condition
如下图所示。
for(var ind=0; ind<=between.length; ind++){
var thisDt = new Date(between[ind]);
if (thisDt.getMonthWeek() === baseDtWk && thisDt.getDay() === baseDtD) {
datesToBeMarked.push(thisDt);
console.log(" :Date: " + between[ind] + " :Week: " + thisDt.getMonthWeek());
console.log("Date entered : " + new Date(between[ind]));
}
}
只需添加 var thisDt = new Date(between[ind])
你可以获得比以前更干净的代码。
1. 现在仔细查看您的代码,您已经在 if-condition
中按周和工作日扫描每个日期。 。合格的元素转到 datesToBeMarked[]
数组。
2.您需要介绍另一个if-condition
这将遍历between[]
数组并将扫描每个 base day
(您将其称为“基”,它是 between[]
数组中的第一个元素)。现在if-condition
如下所示。
for(var ind=0; ind<=between.length; ind++){
var thisDt = new Date(between[ind]);
if (thisDt.getMonthWeek() === baseDtWk && thisDt.getDay() === baseDtD) {
datesToBeMarked.push(thisDt);
console.log(" :Date: " + between[ind] + " :Week: " + thisDt.getMonthWeek());
console.log("Date entered : " + new Date(between[ind]));
}else if(thisDt.getDay() === baseDtD && thisDt.getMonth()!==new Date(datesToBeMarked[ind-1]).getMonth()){
//some magic needs to be done here
}
}
3. 上面 else-if
中发生了什么?它正在检查您已经选择的 Tuesday
与下一个元素。如果是在同一个月到达,则拒绝它。否则让它进入 if-condition
内来看看神奇的举动。 :)
4.最后在您的 else-if
中您需要调用一个函数来找到 next occurrence
Tuesday
的如果它在第一周最初没有到位,如上图所示。
5. 查找日期的函数如下所示。希望你们一切都准备好了。
需要在您的 else-if
中替换以下函数与此评论 //some magic needs to be done here
.
function nthDay(nth, weekday, month, year) {
var nthDate = new Date(year, month + ((nth <= 0) ? 1 : 0), 1);
var dayofweek = nthDate.getDay();
var offset = weekday - dayofweek;
nthDate = new Date(year, month + ((nth <= 0) ? 1 : 0), nthDate.getDate() + (offset + (nth - (offset >= 0 ? 1 : 0)) * 7));
if (nthDate.getMonth() !== month) {
return false;
} else {
return nthDate;
}
}
6. 快乐编码:)
关于javascript - 如果在所需的周中找不到,则获取下一个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28149330/