【问题标题】:get array of dates between two dates, filtered by dayofweek [closed]获取两个日期之间的日期数组,按 dayofweek [关闭]
【发布时间】:2017-04-06 08:00:56
【问题描述】:

我有一个对象如下:

{
  startDate: moment(),
  endDate: moment().add(3, "weeks"),
  friday: true
  monday: true
  saturday: false
  sunday: false
  thursday: false
  tuesday: false
  wednesday: true
}

在 startDate 和 endDate 之间获取与工作日布尔值匹配的日期数组的最佳方法是什么?

预期结果:[...Date(), Date(), Date()...]

【问题讨论】:

标签: javascript angularjs momentjs


【解决方案1】:

您只需使用矩add 和isBefore 从startDate 循环到endDate。

您可以使用 format('dddd') 获取星期几。

如果您需要使用toDate() 将时刻转换为 JavaScript 日期

这是一个工作示例:

function getDateArray(obj){
  var start = obj.startDate.clone();
  var end = obj.endDate.clone();
  var res = [];
  while(start.isBefore(end)){
    var day = start.format('dddd').toLowerCase();
    if( obj[day] ){
      res.push(start.toDate());
    }
    start.add(1, 'd');
  }
  return res;
}

var obj = {
  startDate: moment(),
  endDate: moment().add(3, "weeks"),
  friday: true,
  monday: true,
  saturday: false,
  sunday: false,
  thursday: false,
  tuesday: false,
  wednesday: true
};
var res = getDateArray(obj);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    moments 的 diff 返回两个日期之间的天数 endDate.diff(startDate, '天')

    然后forloop从开始到开始+差异,每个加一天 到每一天 moment().add(1, 'days')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2020-03-02
      • 2018-01-11
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多