【问题标题】:How to get all particular weekDays between two date objects in momentJS如何在momentJS中的两个日期对象之间获取所有特定的工作日
【发布时间】:2021-08-16 11:05:49
【问题描述】:

如何获取开始日期和结束日期之间的所有工作日(相关的特定工作日)。该函数将采用 startDate、endDate(均作为时刻对象)、dayNum(作为整数)(0 - Sun, 1 - Mon ... 6 - Sat) 并返回这些日子的时刻对象列表。

我写了一个函数,但它不起作用。

const getDates = (startDate, endDate, dayNum) => {
let realStart = moment(startDate);
let end = moment(endDate);
let start = realStart.clone();
start.add(-15, "days");

let result = [];


var current = start.clone();
current.day(dayNum + 1);

  while (current.isSameOrBefore(end)) {
    if (current.isSameOrAfter(realStart)) {
      let temp = current.clone();
      result.push(temp);
      current.day(8 + dayNum);
    } else {
      current.day(8 + dayNum);
    }
  }
return result;
};

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    rzr_f 的答案总是一天递增,当startDateendDate 之间的跨度很大时,或者当函数被重复调用时,这是低效的。

    这是一个更高效的版本,每次增加 7 天,并且永远不必检查它添加的日期是否在正确的工作日,因为它总是在正确的工作日开始:

    const getDates = (startDate, endDate, dayNum) => {
      let current = moment(startDate)
      const end = moment(endDate)
      const results = []
    
      // If current is on the wrong weekday, move it forward to the first matching weekday:
      if (current.weekday() !== dayNum) {
        current.add(dayNum >= current.weekday() ? ( dayNum - current.weekday() ) : ( 7 - ( current.weekday() - dayNum ) ), 'day')
      }
    
      while(current.isSameOrBefore(end)) {
        results.push(current.clone())
        current.add(7, 'day')
      } 
    
      return results
    }
    

    【讨论】:

      【解决方案2】:

      我认为这样的事情对你正在尝试做的事情有用:

      const getDates = (startDate, endDate, dayNum) => {
        let current = moment(startDate)
        const end = moment(endDate)
      
        const results = []
      
        while(current.isSameOrBefore(end)) {
          if (current.weekday() === dayNum) results.push(current.clone())
          current.add(1, 'day')
        } 
      
        return results
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-12
        • 1970-01-01
        • 2019-02-24
        • 2015-04-24
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        相关资源
        最近更新 更多