【问题标题】:How to increment date object hours with omitting weekend days如何在省略周末的情况下增加日期对象小时数
【发布时间】:2017-04-16 17:47:29
【问题描述】:

我正在使用 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 对象会跳过周末一样。

【问题讨论】:

标签: javascript date javascript-objects


【解决方案1】:

好的,尝试遵循清洁代码的概念,我已将整个算法放入单独的函数中。我省略了其他几个功能,主要部分包含以下内容:

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

现在,如果您想知道 repeatThis() 的工作原理:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 2018-12-07
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多