2017-04-16 39 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); 
    } 
} 
相關問題