Javascript 如何将周天数添加到日期?

Javascript 如何将周天数添加到日期?,javascript,datetime,Javascript,Datetime,以下代码是否适用于在所有可能的场景中添加周天数? 如果我在“星期四”加上4天,结果应该是下一个“星期三” 我正在尝试获取给定日期后的第n个工作日(工作日) var addOneDay=function(date) { var result = new Date(date.getTime()); result.setDate(result.getDate() + 1); return result; }; var addWeekDays = function(date,d

以下代码是否适用于在所有可能的场景中添加周天数? 如果我在“星期四”加上4天,结果应该是下一个“星期三”

我正在尝试获取给定日期后的第n个工作日(工作日)

var addOneDay=function(date) {
    var result = new Date(date.getTime());
    result.setDate(result.getDate() + 1);
    return result;
};

var addWeekDays = function(date,days) {
    var result = new Date(date.getTime());
    for (var i = 0; i < days; i++) {
        do{
            result = addOneDay(result);
        }while( result.getDay()=== 6 || result.getDay()=== 0);
    };
    return result;
};

var date = new Date(2016,1,18);
console.log(addWeekDays(date,4));
var addOneDay=函数(日期){
var result=新日期(Date.getTime());
result.setDate(result.getDate()+1);
返回结果;
};
var addWeekDays=函数(日期,天){
var result=新日期(Date.getTime());
对于(变量i=0;i<天;i++){
做{
结果=添加一天(结果);
}而(result.getDay()==6 | | result.getDay()==0);
};
返回结果;
};
var日期=新日期(2016年1月18日);
日志(addWeekDays(日期,4));
根据ElenaDBA和Felix Kling的建议修改代码:

var addWeekDays = function(date,days) {
    var result = new Date(date.getTime());
    for (var i = 0; i < days; i++) {
        result.setDate(result.getDate() + 1);
        if (result.getDay()=== 6 || result.getDay()=== 0) i--;
    };
    return result;
};

var date = new Date(2016,1,18);
console.log(addWeekDays(date,4));
var addWeekDays=函数(日期,天){
var result=新日期(Date.getTime());
对于(变量i=0;i<天;i++){
result.setDate(result.getDate()+1);
如果(result.getDay()==6 | | result.getDay()==0)i--;
};
返回结果;
};
var日期=新日期(2016年1月18日);
日志(addWeekDays(日期,4));

像这样的怎么样

 var addOneDay = function (date) {
            var result = new Date(date.getTime());
            result.setDate(result.getDate() + 1);
            return result;
        };

        var addWeekDays = function (date, days) {
            var result = new Date(date.getTime());
            var counter = 1;
            while(counter <= days) {
                if (result.getDay() !== 6 && result.getDay() !== 0) {
                    counter = counter +1;
                }
                result = addOneDay(result);                  
            };
            return result;
        };

        var date = new Date(2016, 1, 18);
        console.log(addWeekDays(date, 4));
var addOneDay=函数(日期){
var result=新日期(Date.getTime());
result.setDate(result.getDate()+1);
返回结果;
};
var addWeekDays=函数(日期,天){
var result=新日期(Date.getTime());
var计数器=1;

while(counter)代码似乎做了你想做的事情。为什么不编写一个简单的测试呢?这就是单元测试的目的。如果你在周四加上4天,你应该在下周二得到你想要完成的事情。在我看来,如果你只想加上工作日,而不是周末,那么你应该有while(result.getDay()!==6&&result.getDay()!==0)实际上,发布的代码没有按照预期的方式工作。它返回2016年2月28日,只计算周末。因此,如果输入是星期三,它将返回下一个星期天您更改了什么?为什么?如何/为什么/何时“更好”而OP的代码呢?OP的代码会在result.getDay返回6或0、saturday或synday时添加天数,OP试图对每个问题只添加工作日。OP的代码会在星期六或星期天添加额外天数,这是正确的。如果从星期四开始并希望添加4个工作日,则需要添加4+2=6天。您需要e如果是星期六或星期天,基本上通过不增加
计数器来做同样的事情。你真的运行了OP的代码吗?绝对不需要双循环。一个循环就足够了。老实说,我甚至不认为需要使用addOneDay函数来增加天数。改用result.setDate应该可以“绝对不需要双循环。一个循环就足够了。”这是真的。实现这种逻辑有多种方法。但正确性比实现细节更重要。你声称OP的代码是不正确的,这给其他访问者留下了错误的印象。OP的代码就我所知是有效的。