首页 > 解决方案 > 查找日期范围内的工作日

问题描述

我正在尝试将日期推送到数组的某个范围内,但它仅推送最后一个日期 n 次,而不是所需的单个日期。

function getBusinessDatesCount(startDatetest, endDatetest) {
    var curDate = startDatetest;
    var weekdays = [];
    while (curDate <= endDatetest) {
        var dayOfWeek = curDate.getDay();
        if (!((dayOfWeek === 6) || (dayOfWeek === 0))) {
            weekdays.push(curDate);
        }
        curDate.setDate(curDate.getDate() + 1);
    }
    console.log(weekdays);
}
var startDatetest = new Date('05/03/2016');
var endDatetest = new Date('05/10/2016');
var numOfDates = getBusinessDatesCount(startDatetest, endDatetest);

在此处输入图像描述

标签: javascriptarrays

解决方案


date你目前在内存中只有两个对象,startDatetestendDatetest- 变化curDate会改变startDatetest,因为对象变量本质上是引用Javascript 中的内存位置。(创建一个引用该对象的新变量,例如curDate = startDatetest,不会克隆该对象,它只会将该引用复制到该对象在内存中的位置)。您需要克隆date对象:

function getBusinessDatesCount(startDatetest, endDatetest) {
  var curDate = startDatetest;
  var weekdays = [];
  while (curDate <= endDatetest) {
    var dayOfWeek = curDate.getDay();
    if (!((dayOfWeek === 6) || (dayOfWeek === 0))) {
      weekdays.push(new Date(curDate.getTime()));
    }
    curDate.setDate(curDate.getDate() + 1);
  }
  console.log(weekdays);
}
var startDatetest = new Date('05/03/2016');
var endDatetest = new Date('05/10/2016');
var numOfDates = getBusinessDatesCount(startDatetest, endDatetest);


推荐阅读