Check if weekend exist in date range using javascript

前端 未结 7 1820
我在风中等你
我在风中等你 2021-01-12 21:27

Wondering if anyone has a solution for checking if a weekend exist between two dates and its range.

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


        
相关标签:
7条回答
  • 2021-01-12 21:40

    You are only checking if the first or second date is a weekend day.

    Loop from the first to the second date, returning true only if one of the days in between falls on a weekend-day:

    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

    0 讨论(0)
  • 2021-01-12 21:46

    It doesn't really make sense to pass in two dates, especially when they are 4 days apart. Here is one that only uses one day which makes much more sense IMHO:

    var date1 = 'Apr 10, 2014';
    
    function isWeekend(date1){
      var aDate1 = new Date(date1);
      var dayOfWeek = aDate1.getDay();
    
      return ((dayOfWeek == 0) || (dayOfWeek == 6));
    }
    
    0 讨论(0)
  • 2021-01-12 21:46

    Use Date.getDay() to tell if it is a weekend.

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

    Check this working sample:

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

    This will list out all weekends in date span. Modify it to adapt to requirements. Good luck.

    0 讨论(0)
  • 2021-01-12 21:48

    I guess this is the one what @MattBurland sugested for doing it without a loop

    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

    0 讨论(0)
  • 2021-01-12 22:01

    Here's what I'd suggest to test if a weekend day falls within the range of two dates (which I think is what you were asking):

    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

    If you need to check if a whole weekend exists within the range, then it's only slightly more complicated.

    0 讨论(0)
  • 2021-01-12 22:02

    Whithout loops, considering "sunday" first day of week (0):

    Check the first date day of week, if is weekend day return true.

    SUM "day of the week" of the first day of the range and the number of days in the lap. If sum>5 return true

    0 讨论(0)
提交回复
热议问题