Javascript 减去考虑周末的天数
例如,我有4个下拉列表,由日期填充Javascript 减去考虑周末的天数,javascript,jquery,date,momentjs,weekend,Javascript,Jquery,Date,Momentjs,Weekend,例如,我有4个下拉列表,由日期填充 ["23rd December 2016","26th December 2016","27th December 2016","28th December 2016", "29th December 2016"] 在这种情况下,我希望避免周末 每个相应下拉列表的值如下所示 - 23rd December 2016 - 26th December 2016 - 27th December 2016 - 28th December 2016 其目的是,如果我
["23rd December 2016","26th December 2016","27th December 2016","28th December 2016", "29th December 2016"]
在这种情况下,我希望避免周末
每个相应下拉列表的值如下所示
- 23rd December 2016
- 26th December 2016
- 27th December 2016
- 28th December 2016
其目的是,如果我将第一个日期的值从23日(“星期五”)更改为26日(“星期一”),则其他3个日期将在一天内更改为以下值
- 26th December 2016
- 27th December 2016
- 28th December 2016
- 29th December 2016
这在以下代码中运行良好
addWeekdays: function (date, days) {
date = moment(date); // use a clone
while (days > 0) {
date = date.add(1, 'days');
// decrease "days" only if it's a weekday.
if (date.isoWeekday() !== 6 && date.isoWeekday() !== 7) {
days -= 1;
}
}
return date;
}
每个下拉列表的值循环使用此函数,date
是下拉列表的日期值,days
是初始日期和新日期之间的天数差
我遇到的问题是,如果我尝试从26号回到23号,我不确定如何重新创建它,因此我得到以下结果:
- 23rd December 2016
- 26th December 2016
- 27th December 2016
- 28th December 2016
基本上这是一种减去周末天数差的方法,因此如果天数差为2,我希望从周一到上周四,而不是周六。
如果有任何帮助,我们将不胜感激。您可以循环使用天数来添加/减去
,然后跳过增量或迭代器(如果是周末)
函数addDaysWithoutWeekends(天、日期){
var d=日期| |时刻();
var retDate=力矩(d);
var ittr=(天/数学绝对值(天));
而(天!==0){
返回日期。添加(ittr,“天”);
如果(!isWeekend(retDate)){
天数+=(ittr*-1);
}
}
归还日期;
}
功能打印(d){
console.log(d.format('DD/MM/YYYY'));
}
功能是周末(日期){
返回日期.day()%6==0;
}
//增加天数
打印(添加日期,不包括周末(10))
//减去天数
打印(不包括周末(-10)的添加日数)
您可以创建一个单独的减去工作日
函数,但最终会重用大部分代码。主要区别在于date.add中的1
,以及天数为负值时的while循环跳过。我们可以通过几个小改动来解决这个问题:
调用date.add时,使用一个伪常量(为了简单起见,我将其命名为daycont
),它将根据上下文而定为正或负,而不是硬编码的1
使用条件检查days
是否为负值,如果为负值,则修改dayConst
以反映该值,并将days设置为正值,这样while循环在任何情况下都会运行
函数添加工作日(日期,天){
//制作一个“伪常量”来表示加减天数时使用的#
var dayConst=1;
日期=时刻(日期);//使用克隆
//在此处添加减法功能
如果(天数<0){
dayConst=-1;
天数=-天;
}
而(天数>0){
//如果天是负数,那么dayConst将是-1。
date=date.add(dayConst,'days');
//只有在工作日时才减少“天数”。
if(date.isoWeekday()!==6和date.isoWeekday()!==7){
天数-=1天;
}
}
返回日期;
}
//我是如何测试它们的(现在是11月23日星期三,所以3天+/-
//分别是11月28日星期一和11月18日星期五)
log(addWeekdays(newdate(),3).format(“YYYY-MM-DD-dddddd”);
log(addWeekdays(新日期(),-3).format(“YYYY-MM-DD-dddddd”);
这可能会有所帮助:@Rajesh这是我将函数引入如何添加不包括周末在内的天数的线程,但我仍然不确定如何减去不包括周末在内的天数weekends@gus27由于days
以-4
的形式返回,while循环将不会启动。尝试此操作时,我陷入了一个无休止的循环中。您能分享您的信息吗案例你能做一把小提琴吗?@mcclosa你复制了isWeekend
?
function addWeekdays (date, days) {
// make a 'pseudo-constant' to represent the # used when adding/subtracting days
var dayConst = 1;
date = moment(date); // use a clone
// add functionality for subtraction here
if (days < 0) {
dayConst = -1;
days = -days;
}
while (days > 0) {
// and then dayConst will be -1 if days is negative.
date = date.add(dayConst, 'days');
// decrease "days" only if it's a weekday.
if (date.isoWeekday() !== 6 && date.isoWeekday() !== 7) {
days -= 1;
}
}
return date;
}
// How I tested them (It's Wednesday Nov 23 here and now, so 3 days +/-
// is Monday Nov 28 and last Friday Nov 18, respectively)
console.log(addWeekdays(new Date(), 3).format("YYYY MM DD dddd"));
console.log(addWeekdays(new Date(), -3).format("YYYY MM DD dddd"));