在 JavaScript 中从工作日中排除周末日期

Exclude weekend dates from working days in JavaScript

所以我有点卡在弄清楚某个方面。我想要做的是:

假设我只有一个简单的日期显示,它将向最终用户显示 October 10th, 2017 之类的日期。然后有一个选项可以从所述日期中减去一定天数(偏移量 1、2、3,无论选择何种偏移量)。

我想要做的是从计数中完全排除周末日期 - 所以如果今天是 Monday, October 9th,并且选择了 1 的 offset,它会至 Friday the 6th;如果选择 偏移量 2,它会转到 Thursday the 5th偏移量 3 转到 Wednesday the 4th...

如果今天是 Wednesday, October 11th偏移量 2 会将您带到 Monday the 9th偏移量 4[=45] =] 会转到 Thursday the 5th,依此类推( 在计算/减去登陆日期 时完全忽略/跳过周末日期)。

到目前为止,我只能找到计算不包括周末的工作日数的功能的答案,以及类似性质的东西(我已经有了,使用 momentjs-business npm模块,但不完全是我需要的).

我没有 post 代码,因为这是一个更大的代码库的一部分,我觉得 post 片段只会增加混乱,因为我认为这个问题相对简单直截了当;我不想过于复杂。

我只想在设置偏移量时完全不包括周末,无论从哪个日期显示给用户(显示给用户的日期来自数据库).

我希望这一切都有意义,如果需要更多信息,请告诉我。提前感谢任何能给我指出正确方向的人!

JavaScript 日期对象有一个 getDay() 方法可以告诉您今天是星期几。您可以使用它来确定哪些日期是周末并排除它们。

var date = new Date();
var dayOfWeek = date.getDay();
console.log(dayOfWeek) // 1 for Monday, 2 for Tuesday, etc.

这样就可以达到我想的效果了。请注意,这是非常低效的。如果您的偏移量非常大,它会在循环的每次迭代中生成一个新日期。通过一些修补,它可以得到优化

let startDate = new Date('10/10/2017');
let endDate = "", offset = 2;
while(offset > 0){
    endDate = new Date(startDate.setDate(startDate.getDate() - 1));
    if(endDate.getDay() !== 0 && endDate.getDay() !== 6){
       offset--;
    }
}

这是一个有效的Fiddle

您可以使用 moment-business library. It has the subtractWeekDays 那:

Subtract week days from the moment, modifying the original moment. Returns the moment.

您的代码可能如下所示:

var m = moment("October 10th, 2017", "MMMM Do, YYYY");
business.subtractWeekDays(m, 2);

如果您不想添加外部库,请查看 addWeekDays and subtractWeekDays 代码。