如何通过省略周末日来增加日期对象小时数

时间:2017-04-16 17:47:29

标签: javascript date javascript-objects

我正在使用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 个答案:

答案 0 :(得分:1)

好的,尝试遵循Clean Code概念,我将整个算法放入separete函数中。我省略了其他一些功能,主要部分包含以下内容:

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);
    }
}