javascript - 如果在所需的周中找不到,则获取下一个工作日

标签 javascript date recurrence

如果在所需的一周中找不到,我怎样才能想出一种算法来找出工作日的下一个出现时间。例如,以下是日历的屏幕截图。 4 月 第一周没有星期二。我需要知道如果不在给定的一周内,我该如何去参加下周的下一个星期二enter image description here

下面是我的算法,它可以很好地获取任意一周的选定工作日。我只想在其中添加两个条件,以便在给定周中不存在工作日的情况下来回迭代。

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]));
   }

}

在上面的代码中 baseDtWkbaseDtD 包含星期和日期。

1到5之间的整数。

Day0 到 6 之间的整数,表示从 sunsat 的工作日。

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/

相关文章:

javascript - CSS/JS : CPU lightweight loading spinner

javascript - 如何在 Spring 中制作 Angular Rest 应用程序?

javascript - 使用 JSON 通过 jQuery 填充 UL

javascript - 如何格式化 BC 日期(如 "-700-01-01")?

r - For循环日期不丢失日期格式

divide-and-conquer - 求解 T(n) = 2T(n/2) + log n

javascript - 如何叠加两个GetCanvas?

C# 从计算机获取日期

java - 获取重复事件: CQRS or complex query?

algorithm - 渐近符号和通过分析算法形成递推关系