使用javascript检查周末是否存在于日期范围内

时间:2014-06-04 13:36:10

标签: javascript date

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

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")
    } 
}

7 个答案:

答案 0 :(得分:7)

最简单的方法是迭代日期,如果任何日期为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;
}

答案 1 :(得分:4)

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

从第一个日期循环到第二个日期,只有当其中一天介于周末之日时才返回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

答案 2 :(得分:1)

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

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 :(得分:0)

传递两个日期并不合理,特别是当他们相隔4天时。这是一个只使用一天更有意义的恕我直言:

var date1 = 'Apr 10, 2014';

function isWeekend(date1){
  var aDate1 = new Date(date1);
  var dayOfWeek = aDate1.getDay();

  return ((dayOfWeek == 0) || (dayOfWeek == 6));
}

答案 4 :(得分:0)

我想这就是@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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

使用Date.getDay()来判断它是否是一个周末。

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

检查此工作样本:

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

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