2016-08-25 103 views
1

我想使用javaScript生成下一个工作日。Javascript:第二天获取,跳过周末

这是我的代码截至目前

var today = new Date(); 
    today.setDate(today.getDate()); 
    var tdd = today.getDate(); 
    var tmm = today.getMonth()+1; 
    var tyyyy = today.getYear(); 

    var date = new Date(); 

    date.setDate(date.getDate()+3); 

问题是,在星期五它,而我希望它是周一

+2

看看今天('today.getDay()'),如果它是5(星期五)加3,如果它是6(星期六)加2,否则加1. – RobG

+0

如果if语句表示'date'星期六的星期几,再加两天。添加另一个if语句来检查星期天。 – jedifans

回答

1

这将选择下一个工作日周六返回的日期。

var today = new Date(2016, 7, 26); // Friday 
 
alert(today); 
 
today.setDate(today.getDate()+1); // tomorrow 
 
while (today.getDay() == 6 || today.getDay() == 0) today.setDate(today.getDate() + 1); 
 
alert(today); 
 

 
// or without a loop: 
 

 
function getNextWork(d) { 
 
    d.setDate(d.getDate()+1); // tomorrow 
 
    if (d.getDay()==0) d.setDate(d.getDate()+1); 
 
    else if (d.getDay()==6) d.setDate(d.getDate()+2); 
 
    return d; 
 
} 
 
today = getNextWork(new Date(2016, 7, 26)); // Friday 
 
alert(today); 
 
today = getNextWork(new Date(2016, 7, 29)); // Monday 
 
alert(today); 
 

 
// Implementing Rob's comment 
 

 
function getNextWork1(d) { 
 
    var day = d.getDay(),add=1; 
 
    if (day===5) add=3; 
 
    else if (day===6) add=2; 
 
    d.setDate(d.getDate()+add); 
 
    return d; 
 
} 
 
today = getNextWork1(new Date(2016, 7, 26)); // Friday 
 
alert(today); 
 
today = getNextWork1(new Date(2016, 7, 29)); // Monday 
 
alert(today);

+0

这是因为我需要这种格式的日期 – werlox

+0

'var tdd = today.getDate(); var tmm = today.getMonth()+ 1; var tyyyy = today.getYear();'不是你问题的一部分,我认为 – mplungjan

+0

是的,事实并非如此。你是解决方案的作品。谢谢(: – werlox

0

您可以在时间加1天,直到你在一天,是不是星期六或星期日:

function getNextBusinessDay(date) { 
 
    // Copy date so don't affect original 
 
    date = new Date(+date); 
 
    // Add days until get not Sat or Sun 
 
    do { 
 
    date.setDate(date.getDate() + 1); 
 
    } while (!(date.getDay() % 6)) 
 
    return date; 
 
} 
 

 
// today, Friday 26 Aug 2016 
 
[new Date(), new Date(2016,7,26)].forEach(function(d) { 
 
    console.log(d.toLocaleString() + ' : ' + getNextBusinessDay(d).toLocaleString()); 
 
});

+0

其实你的评论似乎更好的主意:) – mplungjan

0

检查这出:https://jsfiddle.net/e9a4066r/

function get_next_weekday (date) { 
    var tomorrow = new Date(date.setDate(date.getDate() + 1)) 
    return tomorrow.getDay() % 6 
     ? tomorrow 
     : get_next_weekday(tomorrow) 
} 
+0

这是一个美丽的方式来做到这一点!代码只是有一些问题。举一个例子:如果我们使用2016年12月31日的日期跳转到02年2月,而不是2017年1月2日 - 需要处理几个月和几年的界限。 –

0

接受的答案将跳过一个天一个地,它回答了有机磷农药的问题,但任何人都希望增加一个变量的天数,同时还跳过周末下面的功能可能会有所帮助:

function addWorkDays(date, days) { 
    while (days > 0) { 
    date.setDate(date.getDate() + 1); 
    if (date.getDay() != 0 && date.getDay() != 6) { 
     days -= 1; 
    } 
    }   
    return date; 
}