在日期中添加天数时,如何检查它是星期六还是星期日

when adding a number of days to a date, how to check if it is saturday or sunday

本文关键字:检查 星期六 星期日 何检查 添加 日期      更新时间:2023-09-26

我使用以下代码将 X 天添加到今天的日期。 在添加天数时,如果遇到星期六或星期日,我需要跳过它。 例如,如果今天是 7/7/2016(星期四),而我正在添加 5 天,通常它是 7/12/2016(星期二),在这种情况下,我需要跳过星期六和星期日,所以添加 5 天将是 7/14/2016(星期四)。 这是添加 X 天数的代码,X 是 NumDays。 我想我需要在行周围添加一个 FOR 循环:NewDate.setDate(NewDate.getDate() + parseFloat(NumDays));并检查它是否落在周六或周日,如果是,请跳过它,但很难弄清楚。 有人做过这样的事情吗?

var date = new Date(today);
    var NewDate = new Date(date);
    var NumDays = globals().XML.selectSingleNode("//_GetRSNumberOfDays/NumberOfDays").text;
    NewDate.setDate(NewDate.getDate() + parseFloat(NumDays));
    switch(NewDate.getDay())
    {
        case 6: 
            NewDate.setDate(NewDate.getDate() + 2);
        break;
        case 0:
            NewDate.setDate(NewDate.getDate() + 1);
        break; 
    }
    var dd = NewDate.getDate();
    var mm = NewDate.getMonth() + 1;
    var y = NewDate.getFullYear();
    var someFormattedDate = y + "/" + mm + "/" + dd

@Bathsheba的答案更有效,但如果您希望添加少量天数,而不是跨大型日期集,这可能更容易理解和维护:

function addDays(date, howMany) {
    var date = new Date(date);  // copy off
    var skip = [0, 6]
    while (howMany-- > 0) {
        date.setDate(date.getDate() + 1);   // add a day
        while (skip.indexOf(date.getDay()) > -1) {  // if we're on a skip day, keep on adding
            date.setDate(date.getDate() + 1);
        }
    }
    return date
}

这出现了很多,如果你巧妙地处理它(即不使用循环),你可以以恒定的复杂性得到解决方案:

基本上,您可以在日期序列号上使用 % 7 来标识星期几。

然后分三步进行,总天数 X

  1. 添加必要的天数,直到周末开始(请记住使用% 7检查)。从 X 中减去它。 如有必要,终止。

  2. 加上 7 * (X/5
  3. ) 天,从 X 中减去 5 * (X/5)。 请注意,我在这里依靠整数除法。

  4. 添加 X 的剩余值(如果有)。