js从指定日期开始获取n个工作日后的日期

发布时间 2023-06-01 17:50:11作者: 少昊

` //获取非工作日 这一个函数是根据年份获取非工作日的数组 例:'2023-2-12,2023-2-18,2023-2-19...'

        function query_fworkday(year) {
            var p_w_workday;
            Aurora.request({
                url: Aurora.getCmp('query_status_link').getUrl(),
                para: {
                    year: year,
                    user_id: '${/session/@user_id}'
                },
                success: function(res) {
                    p_w_workday = res.result.p_w_workday;
                },
                sync: true,
                scope: this
            });
            if (!Ext.isEmpty(p_w_workday)) {
                return p_w_workday.split(",");
            }
            return [];
        }`


      //日期转换年月日字符串  这一步是为了获取年月日  也是为了转换字符串
      //试了date.format 和 date.toJSON().substr(0, 10) 还有new Date().toISOString().slice(0, 10) 都有问题 
      //应该是时区问题 因为不能用date类型 所以没去纠结
      function iformatDate(date) {
          var year = date.getFullYear();
          var month = date.getMonth() + 1;
          var day = date.getDate(); 
          return(year + '-' + month + '-' + day);
      }
      //从stratDate开始获取addDay工作日后的日期
      function addWorkDay(stratDate,addDay) {  
                 //获取年份
                 var year = stratDate.getFullYear(); 
                 //获取非工作日数组  因为是根据年份获取的 所以年尾的时候会不准确 可以获取两年的放一起
                 var fworkday = query_fworkday(year);  
            for (var i = 0;i < addDay;i++) { 
                stratDate = stratDate.setDate(stratDate.getDate() + 1); 
                stratDate=new Date(stratDate);  
                //这一步是转换成年月日的字符串 方便用indexOf查数组
                var ndate = iformatDate(stratDate);   
                if(fworkday.indexOf(ndate)==-1){
                    // console.log("不存在");
                }else{
                    i=i-1;
                } 
            }   
            return stratDate;
      }

`