我正在使用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对象会在周末过去一样。
答案 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);
}
}