Javascript 如何在省略周末的情况下增加日期对象小时数
我正在用JavaScript使用Date对象制作一个截止日期计算器函数 我有输入的日期和周转时间,算法会在一个日期内返回截止日期。它现在可以正常工作了,但是当我增加date对象的周转时间足以开始新的一周时,它也包括周末。这破坏了我的整个算法,因为我不想把周末算作有效工作时间 我可以在Date对象上设置一个省略周末的日期吗?例如:Javascript 如何在省略周末的情况下增加日期对象小时数,javascript,date,javascript-objects,Javascript,Date,Javascript Objects,我正在用JavaScript使用Date对象制作一个截止日期计算器函数 我有输入的日期和周转时间,算法会在一个日期内返回截止日期。它现在可以正常工作了,但是当我增加date对象的周转时间足以开始新的一周时,它也包括周末。这破坏了我的整个算法,因为我不想把周末算作有效工作时间 我可以在Date对象上设置一个省略周末的日期吗?例如: 0 = "Sunday"; 1 = "Monday"; 2 = "Tuesday"; 3 = "Wednesday"; 4 = "Thursday"; 5 = "Fri
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对象将跳过周末一样。好的,尝试遵循干净的代码概念,我将整个算法放入了separate函数中。我将介绍几个其他功能,主要部分包括以下内容:
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;
}
这会逐日递增日期对象。我们为什么需要这个?嗯,我必须知道时间间隔到达周末的位置,这样我就可以使用pushToNextWeekIfReachedWeekend方法“踩”上它并跳过:
现在,如果您想知道这是如何工作的:
可能是@Julian的复制品是的,我没有使用Moment.jsGood point,尽管建议使用Moment.js。我认为没有Moment.js很难做到这一点,为什么要重新发明轮子呢?没有库一点都不难,请参阅。你真的应该把你试过的东西贴出来。
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;
}
const repeatThis = x => f => {
if (x > 0) {
f();
repeatThis(x - 1)(f);
}
}