js 判断日期是否节假日

判断节假日 有阳历的日期 也有阴历的日期 所以要获得两个日期 加以判断

 这个只能用到 2020年 我发现 2021年开始 农历就不对劲了    所以 我最终的解决方案在 最下面 这个 做一个参考 

  1       $(function () {
  2 
  3         // 找到阴历 的 月 日
  4         var CalendarData=new Array(100);
  5         var madd=new Array(12);
  6        // var tgString="甲乙丙丁戊己庚辛壬癸";
  7        // var dzString="子丑寅卯辰巳午未申酉戌亥";
  8         var numString="一二三四五六七八九十";
  9         var monString="正二三四五六七八九十冬腊";
 10         var weekString="日一二三四五六";
 11       //  var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
 12         var cYear,cMonth,cDay,TheDate;  //阴历年月日变量
 13         CalendarData = new Array(0xA4B,0x5164B,0x6A5,0x6D4,0x415B5,0x2B6,0x957,0x2092F,0x497,0x60C96,0xD4A,0xEA5,0x50DA9,0x5AD,0x2B6,0x3126E, 0x92E,0x7192D,0xC95,0xD4A,0x61B4A,0xB55,0x56A,0x4155B, 0x25D,0x92D,0x2192B,0xA95,0x71695,0x6CA,0xB55,0x50AB5,0x4DA,0xA5B,0x30A57,0x52B,0x8152A,0xE95,0x6AA,0x615AA,0xAB5,0x4B6,0x414AE,0xA57,0x526,0x31D26,0xD95,0x70B55,0x56A,0x96D,0x5095D,0x4AD,0xA4D,0x41A4D,0xD25,0x81AA5,0xB54,0xB6A,0x612DA,0x95B,0x49B,0x41497,0xA4B,0xA164B, 0x6A5,0x6D4,0x615B4,0xAB6,0x957,0x5092F,0x497,0x64B, 0x30D4A,0xEA5,0x80D65,0x5AC,0xAB6,0x5126D,0x92E,0xC96,0x41A95,0xD4A,0xDA5,0x20B55,0x56A,0x7155B,0x25D,0x92D,0x5192B,0xA95,0xB4A,0x416AA,0xAD5,0x90AB5,0x4BA,0xA5B, 0x60A57,0x52B,0xA93,0x40E95);
 14         madd[0]=0;
 15         madd[1]=31;
 16         madd[2]=59;
 17         madd[3]=90;
 18         madd[4]=120;
 19         madd[5]=151;
 20         madd[6]=181;
 21         madd[7]=212;
 22         madd[8]=243;
 23         madd[9]=273;
 24         madd[10]=304;
 25         madd[11]=334;
 26 
 27         function GetBit(m,n){
 28           return (m>>n)&1;
 29         }
 30         function e2c(){
 31           TheDate= (arguments.length!=3) ? new Date() : new Date(arguments[0],arguments[1],arguments[2]);
 32           var total,m,n,k;
 33           var isEnd=false;
 34           var tmp=TheDate.getYear();
 35           if(tmp<1900){
 36             tmp+=1900;
 37           }
 38           total=(tmp-1921)*365+Math.floor((tmp-1921)/4)+madd[TheDate.getMonth()]+TheDate.getDate()-38;
 39 
 40           if(TheDate.getYear()%4==0&&TheDate.getMonth()>1) {
 41             total++;
 42           }
 43           for(m=0;;m++){
 44             k=(CalendarData[m]<0xfff)?11:12;
 45             for(n=k;n>=0;n--){
 46               if(total<=29+GetBit(CalendarData[m],n)){
 47                 isEnd=true; break;
 48               }
 49               total=total-29-GetBit(CalendarData[m],n);
 50             }
 51             if(isEnd) break;
 52           }
 53           cYear=1921 + m;
 54           cMonth=k-n+1;
 55           cDay=total;
 56           if(k==12){
 57             if(cMonth==Math.floor(CalendarData[m]/0x10000)+1){
 58               cMonth=1-cMonth;
 59             }
 60             if(cMonth>Math.floor(CalendarData[m]/0x10000)+1){
 61               cMonth--;
 62             }
 63           }
 64         }
 65 
 66         function GetcDateString(){
 67           var tmp="";
 68           //tmp+=tgString.charAt((cYear-4)%10);
 69         //  tmp+=dzString.charAt((cYear-4)%12);
 70          // tmp+="(";
 71          // tmp+=sx.charAt((cYear-4)%12);
 72         //  tmp+=")年 ";
 73           if(cMonth<1){
 74           //  tmp+="(闰)";
 75             tmp+=monString.charAt(-cMonth-1);
 76           }else{
 77             tmp+=monString.charAt(cMonth-1);
 78           }
 79           tmp+="月";
 80           tmp+=(cDay<11)?"初":((cDay<20)?"十":((cDay<30)?"廿":"三十"));
 81           if (cDay%10!=0||cDay==10){
 82             tmp+=numString.charAt((cDay-1)%10);
 83           }
 84           return tmp;
 85         }
 86 
 87         function GetLunarDay(solarYear,solarMonth,solarDay){
 88 //solarYear = solarYear<1900?(1900+solarYear):solarYear;
 89           if(solarYear<1921 || solarYear>2222){
 90             return "";
 91           }else{
 92             solarMonth = (parseInt(solarMonth)>0) ? (solarMonth-1) : 11;
 93             e2c(solarYear,solarMonth,solarDay);
 94             return GetcDateString();
 95           }
 96         }
 97         //获取今天的阳历年月日
 98         //var D=new Date();
 99         var D= new Date(2021,1,11);
100         var yy=D.getFullYear();
101         var mm=D.getMonth()+1;
102         var dd=D.getDate();
103         var ww=D.getDay();
104         var ss=parseInt(D.getTime() / 1000);
105         if (yy<100) yy="19"+yy;
106         //获取阴历的 月 日
107         GetLunarDay(yy,mm,dd);
108         var yMonth=""; //阴历 月份
109         if(cMonth<1){
110           yMonth=monString.charAt(-cMonth-1);
111         }else{
112           yMonth=monString.charAt(cMonth-1);
113         }
114         var yDay=""; //阴历 日期
115         yDay+=(cDay<11)?"初":((cDay<20)?"十":((cDay<30)?"廿":"三十"));
116         if (cDay%10!=0||cDay==10){
117           yDay+=numString.charAt((cDay-1)%10);
118         }
119         console.log(D);
120         console.log(mm+"-"+dd);
121         console.log(yMonth+"-"+yDay);
122       //  元旦 1天 1-1
123         //  //;zhi (二)春节,除夕 到初六
124         //  (三)清明节,放假1天(农历清明当日); 算不出来的
125         //  (四)劳动节,放假1天(5月1日); 阳历 5-1
126         //  (五)端午节,放假1天(农历端午当日);阴历五月五号
127         //  (六)中秋节,放假1天(农历中秋当日);阴历八月15
128         //  (七)国庆节,放假3天(10月1日、2日、3日)。阳历  10-1  -10-7
129 
130 
131        if(mm=='1'&&dd=='1'){
132          console.log("元旦");
133        }else if(mm=='5'&&dd=='1'){
134          console.log("劳动节");
135        }else if(mm=='10'&&(dd=='1'||dd=='2'||dd=='3'||dd=='4'||dd=='5'||dd=='6'||dd=='7')){
136          console.log("国庆节");
137        }else if(mm=='五'&&dd=='初五'){
138          console.log("端午节");
139        }else if(mm=='八'&&dd=='十五'){
140          console.log("中秋节");
141        }else if(mm=='腊'&&dd=='三十'||mm=='一'&&(dd=='初一'||dd=='初二'||dd=='初三'||dd=='初四'||dd=='初五'||dd=='初六')){
142          console.log("春节");
143        }
144 
145 
146       })
147 
148     

 上面那个只能用到 2020年尾

我找了很多资料 但是没有找到  最终只能选择了使用api 查找

 

 

    $.ajaxSetup({
      async: false
    });

     $.ajax({
      url:'http://www.autmone.com/openapi/icalendar/queryDate?date=2021-02-03', //请求的URL
      timeout : 1000, //超时时间设置,单位毫秒
      type : 'get', //请求方式,get或post
      data :{}, //请求所传参数,json格式
      dataType:'json',//返回的数据格式
      success:function(data){ //请求成功的回调函数
        console.log(data.data.iMonthChinese);
        console.log(data.data.iDayChinese);
      },
       error:function(XMLHttpRequest, textStatus, errorThrown) {
         if(textStatus=="timeout"){
           console.log("加载超时,请重试");
         }else{
           console.log("出现异常");
         }

      }
     });

    $.ajaxSetup({
      async: true
    });

又出现一个小问题  公司项目对于所有的 ajax请求做了一个附加参数 记录了 当前用户  这个参数导致我使用这个api查不到数据

没办法 还得通过 controller 转一下 

  /**
     */
    @ResponseBody
    @RequestMapping(value = "/judgeTheDateAndHoliday")
    public ResponseVo getInjectionEfficiency(String date
        ) throws Exception {

        String string = "date="+date;
        
    
        String msg = "";
        String post = HttpUtils.post("http://www.autmone.com/openapi/icalendar/queryDate", string,1000);
        System.out.println(post);

        LnjectionYieldAchievementVo jsonToPojo = JsonUtil.jsonToPojo(post, LnjectionYieldAchievementVo.class);
        
        return ResultUtil.success(msg, jsonToPojo);
    }

 

 

可以了 ...

这个返回参数有繁体字的存在 要注意这个 

 

posted @ 2021-01-18 15:27  喜欢22度的晴天  阅读(4573)  评论(1编辑  收藏  举报