【问题标题】:Check if weekend exist in date range using javascript使用javascript检查日期范围内是否存在周末
【发布时间】:2014-07-25 04:39:15
【问题描述】:

想知道是否有人有解决方案来检查两个日期及其范围之间是否存在周末。

var date1 = 'Apr 10, 2014';
var date2 = 'Apr 14, 2014';


funck isWeekend(date1,date2){
   //do function

    return isWeekend;
}

提前谢谢你。

编辑添加我到目前为止的内容。检查这两天。

function isWeekend(date1,date2){
   //do function
    if(date1.getDay() == 6 || date1.getDay() == 0){
        return isWeekend;
        console.log("weekend")
    } 
        if(date2.getDay() == 6 || date2.getDay() == 0){
        return isWeekend;
        console.log("weekend")
    } 
}

【问题讨论】:

  • 向我们展示您的尝试?
  • 计算开始日期和结束日期之间的天数,如果大于5,则必须包含周末。 (不清楚您是否想要一个整个周末,或者只是一个周六或周日)。如果是<5 天,那么您需要在开始和结束日期使用getDay()。范围从周日的0 到周六的6,因此很容易确定那些日子是否会在该范围内。
  • 有一个示例 here 供您检查如何循环通过 2 个日期,在该循环中您可以检查 start.getDay(),值以确定是否有周末。
  • @BatuZet:我认为你甚至不需要循环。如果你在开头和结尾都做getDay(),你应该可以解决的。
  • 是的@Matt Burland。我在你做的几毫秒后发布了我的。如果我早些时候看到你的,我不会发布我的:P

标签: javascript date


【解决方案1】:

最简单的方法是迭代日期并返回如果任何一天是6(星期六)或0(星期日)

演示:http://jsfiddle.net/abhitalks/xtD5V/1/

代码:

function isWeekend(date1, date2) {
    var d1 = new Date(date1),
        d2 = new Date(date2), 
        isWeekend = false;

    while (d1 < d2) {
        var day = d1.getDay();
        isWeekend = (day === 6) || (day === 0); 
        if (isWeekend) { return true; } // return immediately if weekend found
        d1.setDate(d1.getDate() + 1);
    }
    return false;
}

如果要检查两个日期之间是否存在整个周末,则稍微更改代码:

演示 2:http://jsfiddle.net/abhitalks/xtD5V/2/

代码:

function isFullWeekend(date1, date2) {
    var d1 = new Date(date1),
        d2 = new Date(date2); 

    while (d1 < d2) {
        var day = d1.getDay();
        if ((day === 6) || (day === 0)) { 
            var nextDate = d1; // if one weekend is found, check the next date
            nextDate.setDate(d1.getDate() + 1); // set the next date
            var nextDay = nextDate.getDay(); // get the next day
            if ((nextDay === 6) || (nextDay === 0)) {
                return true; // if next day is also a weekend, return true
            }
        }
        d1.setDate(d1.getDate() + 1);
    }
    return false;
}

【讨论】:

  • 你能解释一下这里到底发生了什么吗? isWeekend = (day == 6) || (天 == 0);抱歉,只是想进一步理解逻辑:)
  • 如果一天是6(即星期六)或如果这一天是0(即星期日),那么我们知道这是一个周末。 (在 Javascript 中,天数是 0 到 6)我们将布尔变量 isWeekend 设置为 true,如果为 true,则返回。或者,您可以直接返回 true。
  • 啊!我不知道您可以直接在 JS 中的变量中执行此操作。这真是太棒了!再次感谢您!
  • 如果 date2 是星期六,该函数将返回 false,您应该使用 while (d1 &lt;= d2)
【解决方案2】:

以下是我建议测试周末是否在两个日期范围内的内容(我认为这就是您要问的):

function containsWeekend(d1, d2)
{
    // note: I'm assuming d2 is later than d1 and that both d1 and d2 are actually dates
    // you might want to add code to check those conditions
    var interval = (d2 - d1) / (1000 * 60 * 60 * 24); // convert to days
    if (interval > 5) {
        return true;    // must contain a weekend day
    }
    var day1 = d1.getDay();
    var day2 = d2.getDay();
    return !(day1 > 0 && day2 < 6 && day2 > day1);
}

fiddle

如果您需要检查该范围内是否存在一个整个周末,那么它只会稍微复杂一些。

【讨论】:

    【解决方案3】:

    使用 Date.getDay() 判断是否是周末。

      if(tempDate.getDay()==6 || tempDate.getDay()==0)
    

    检查此工作示例:

    http://jsfiddle.net/danyu/EKP6H/2/

    这将列出日期范围内的所有周末。 修改它以适应要求。 祝你好运。

    【讨论】:

      【解决方案4】:

      没有循环,考虑“星期日”一周的第一天 (0):

      检查一周中的第一个日期,如果是周末则返回 true。

      SUM 范围内第一天的“星期几”和一圈的天数。 如果 sum>5 返回 true

      【讨论】:

        【解决方案5】:

        我猜这是@MattBurland 建议的不循环的方法

        function isWeekend(start,end){
          start = new Date(start);
          if (start.getDay() == 0 || start.getDay() == 6) return true;
          end = new Date(end);
        
          var day_diff = (end - start) / (1000 * 60 * 60 * 24);
          var end_day = start.getDay() + day_diff;    
          if (end_day > 5) return true;
        
          return false;
        }
        

        FIDDLE

        【讨论】:

          【解决方案6】:

          传递两个日期并没有什么意义,尤其是当它们相隔 4 天时。这是一个只使用一天的,更有意义的是恕我直言:

          var date1 = 'Apr 10, 2014';
          
          function isWeekend(date1){
            var aDate1 = new Date(date1);
            var dayOfWeek = aDate1.getDay();
          
            return ((dayOfWeek == 0) || (dayOfWeek == 6));
          }
          

          【讨论】:

            【解决方案7】:

            您只是检查第一个或第二个日期是否是周末。

            从第一个日期循环到第二个日期,仅当中间的某一天是周末时才返回 true:

            function isWeekend(date1,date2){
                var date1 = new Date(date1), date2 = new Date(date2);
            
                //Your second code snippet implies that you are passing date objects 
                //to the function, which differs from the first. If it's the second, 
                //just miss out creating new date objects.
            
                while(date1 < date2){
                    var dayNo = date1.getDay();
                    date1.setDate(date1.getDate()+1)
                    if(!dayNo || dayNo == 6){
                        return true;
                    }
                }
            }
            

            JSFiddle

            【讨论】:

              猜你喜欢
              • 2013-06-11
              • 1970-01-01
              • 2017-01-28
              • 2023-03-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多