2017-04-16 63 views
-1

我正在使用Date对象在JavaScript中制作截止日期计算器函数。如何通过省略周末日期来增加日期对象小时数

我有一个输入的日期和周转时间,算法在日期中给出了截止日期。它的工作现在很好,但是当我用一个足够大的周转时间增加日期对象以开始新的一周时,它还包括周末的日子。这会压缩我的整个算法,因为我不想将周末算作有效的工作时间。

可以以某种方式在Date对象上进行设置,省略周末日期吗?例如:

0 = "Sunday"; 
1 = "Monday"; 
2 = "Tuesday"; 
3 = "Wednesday"; 
4 = "Thursday"; 
5 = "Friday"; 
6 = "Saturday"; 

Thursday date + 24 hours => Friday date. But Friday date + 72 hours => Monday date 
instead of Wednesday date. 

我怎么能计算的截止日期,而无需使用周末两天,所以当我给72小时到周五日期例如,我不会周一,周三却反而?就像Date对象会在周末结束时一样。

+1

的可能的复制【如何排除使用Moment.js两个日期间的周末(http://stackoverflow.com/questions/20788411/how-to-exclude-weekends- between-two-dates-using-moment-js) – Julian

+0

@Julian是的,我没有使用Moment.js – MattSom

+1

好点,虽然建议使用Moment.js – Julian

回答

0

好的,试图遵循Clean Code的概念,我把整个算法放到了独立函数中。我正在省略其他一些功能,主要部分包含以下内容:

function incrementWithTime(submit, days, hours_to_increment) { 
    let date = new Date(submit); 
    repeatThis(days) (() => date = pushToNextWeekIfReachedWeekend(new Date(date.getTime() + (24*1000*3600)))); 
    date = new Date(date.getTime() + (hours_to_increment*1000*3600)); 
    return date; 
} 

这会逐日增加Date对象。我们为什么需要这个?好吧,我不得不知道的时间间隔达到一个周末的一天,所以我可以在其上“一步”,并跳过,使用pushToNextWeekIfReachedWeekend()方法:现在

function pushToNextWeekIfReachedWeekend(submit) { 
    let date = new Date(submit); 
    let day = date.getDay(); 
    const saturday = 6, sunday = 0; 

if(day == saturday) 
    date.setDate(date.getDate() + 2);  
if(day == sunday) 
    date.setDate(date.getDate() + 1); 
return date; 
} 

,如果你想知道如何reapeatThis()作品:

const repeatThis = x => f => { 
    if (x > 0) { 
     f(); 
     repeatThis(x - 1)(f); 
    } 
}