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

时间:2017-10-10 03:26:35

标签: javascript angularjs date momentjs angular-moment

所以我有点想弄清楚某个方面。我想做的是以下几点:

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

我要做的是将完整的周末日期排除在计数之外 - 因此,如果今天为Monday, October 9th,并且选择偏移量为1 ,则会转到{{1} };如果选择偏移2 ,则转到Friday the 6th; 偏移3 转到Thursday the 5th ...

如果今天为Wednesday the 4th,则偏移为2 会将您带到Wednesday, October 11th偏移为4 会转到{{1}等等(在计算/减去哪一天落在时完全忽略/跳过周末日期。)

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

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

我想要的是,当从用户显示的日期设置偏移量时,根本不包括周末(显示给用户的日期来自数据库)。

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

3 个答案:

答案 0 :(得分:1)

这将达到您想要的目标。请注意,这非常低效。如果您的偏移非常大,它会在循环的每次迭代中生成一个新日期。通过一些修补,可以进行优化

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

答案 1 :(得分:1)

您可以使用moment-business库。它有subtractWeekDays

  

从此刻减去工作日,修改原始时刻。返回时刻。

您的代码可能如下所示:

d$Result <- 100*ave(...)

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

答案 2 :(得分:0)

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

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