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

标签 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 对象会跳过周末一样。

最佳答案

好吧,为了遵循干净代码的概念,我将整个算法放入单独的函数中。我省略了一些其他功能,主要部分由以下内容涵盖:

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

关于javascript - 如何通过省略周末来增加日期对象的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440205/

相关文章:

javascript - 通过字符串数组从对象数组中搜索以获取对象数组

java - 从 Date.getTime() 计算日期/时间

java - JXL(Java)更改为1904日期系统

javascript - 按顺时针方向排序点

javascript - 如何检查 ng-repeat 生成的第一个 radio 输入?

java - 显示日期和时间

javascript - 在 Javascript 中使用新函数扩展对象

python - 使用 python 将 JavaScript 对象转换为 JSON

javascript - 使用 JavaScript 追加和选择多个 div

javascript - 使用 css 将按钮定位在 html 中的输入文本字段顶部时出现问题