js 计算当前时间和和一段时候后的工作日天数,排除周末和法定假日

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuckomg/article/details/81035440

例:计算当前时间 过5个(设为N个工作日)工作日后的的日期。
思路:
获取当前系统时间 +n(n个工作日后) + 之间的周末和法定假日天数

因为法定假日是不变的 ,所以 首先我们将法定假日设定为一个数组

  //节假日数组
          var Holiday = ["2018/1/1","2018/1/15","2018/2/19","2018/5/28","2018/7/4","2018/9/3","2018/10/8","2018/11/12","2018/11/22","2018/12/25"];

          /**
           * 使用循环的方式判断一个元素是否存在于一个数组中
           * @param {Object} arr 数组
           * @param {Object} value 元素值
           */
           function isInArray(arr,value){
            for(var i = 0; i < arr.length; i++){
              if(value === arr[i]){
                  return true;
                  }
            }
              return false; 
         }

然后获取当前的系统时间


//格式化当前的系统时间 格式为(yyyy-MM-dd)
        function times(){

          var date = new Date();
          var nowMonth = date.getMonth() + 1;
          var hours = date.getHours();
          if(hours >= 15){
              var strDate = date.getDate();
          }else{
              var strDate = date.getDate()-1;
          }
          // 获取当前是几号
          //var strDate = date.getDate();
          // 添加分隔符“-”
          var seperator = "-";
          // 对月份进行处理,1-9月在前面添加一个“0”
          if (nowMonth >= 1 && nowMonth <= 9) {
             nowMonth = "0" + nowMonth;
          }
          // 对月份进行处理,1-9号在前面添加一个“0”
          if (strDate >= 0 && strDate <= 9) {
             strDate = "0" + strDate;
          }
          // 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期
          var nowDate = date.getFullYear() + seperator + nowMonth + seperator + strDate;
          return nowDate;
        }

这里是计算节假日的函数

 /**
   * 计算当期时间 经过一段工作日后的日期
   * @param {date} startDate 当前时间
   * @param {string} limitDay 工作日
   */
   function getWorkDate(startDate,limitDay){
        var time = Date.parse(startDate);
        var startTime = new Date(Date.parse(startDate));
         var startTime = startTime.getTime();
         var T = 24*60*60*1000; 
         var endTime = startTime+(limitDay*T);
         if(limitDay>0){
          var holidays = 0;
          for(var i=startTime+T;i<=endTime;i+=T){
           var date = new Date(i);
           //此处为节假日逻辑
           if(date.getDay()==0 || date.getDay()==6){  
            holidays++;
           }
           //判断日期是否在节假日数组中
           if(isInArray(Holiday,date.toLocaleDateString()) == true){
                        holidays++;
            }
          }
          return getWorkDate(new Date(endTime),holidays);
         }else{
          return startDate.toLocaleDateString();

         }
        }

实例化

//获取当前系统时间
var current_time = times();

//计算当前时候 三个工作日后的日期 格式为(YYYY-MM-dd) 
var min_days = getWorkDate(current_time,"3");

猜你喜欢

转载自blog.csdn.net/fuckomg/article/details/81035440
今日推荐