带节日和农历的js日历
http://www.cnblogs.com/jihua/p/jsrili.html

解决方案 »

  1.   

    function drawCld(SY,SM) {
       var TF=true;
       var p1=p2="";
       var i,sD,s,size;
       cld = new calendar(SY,SM);
       GZ.innerHTML = '                       【'+Animals[(SY-4)%12]+'】';    //生肖
       for(i=0;i<42;i++) {
          sObj=eval('SD'+ i);
          lObj=eval('LD'+ i);
          sObj.className = '';
          sD = i - cld.firstWeek;
          if(sD>-1 && sD<cld.length) { //日期内
             sObj.innerHTML = sD+1;
             if(cld[sD].isToday){ sObj.style.color = '#9900FF';} //今日颜色
             else{sObj.style.color = '';}
             if(cld[sD].lDay==1){ //显示农历月
               lObj.innerHTML = '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
             }
             else{lObj.innerHTML = cDay(cld[sD].lDay);}    //显示农历日
            var Slfw=Ssfw=null;
            s=cld[sD].solarFestival;
            for (var ipp=0;ipp<lFtv.length;ipp++){    //农历节日
                if (parseInt(lFtv[ipp].substr(0,2))==(cld[sD].lMonth)){
                    if (parseInt(lFtv[ipp].substr(2,4))==(cld[sD].lDay)){
                        lObj.innerHTML=lFtv[ipp].substr(5);
                        Slfw=lFtv[ipp].substr(5);
                    }
                }
                if (12==(cld[sD].lMonth)){    //判断是否为除夕
                    if (eve==(cld[sD].lDay)){lObj.innerHTML="除夕";Slfw="除夕";}
                }
            }
            for (var ipp=0;ipp<sFtv.length;ipp++){    //公历节日
                if (parseInt(sFtv[ipp].substr(0,2))==(SM+1)){
                    if (parseInt(sFtv[ipp].substr(2,4))==(sD+1)){
                        lObj.innerHTML=sFtv[ipp].substr(5);
                        Ssfw=sFtv[ipp].substr(5);
                    }
                }
            }
            if ((SM+1)==5){    //母亲节
                if (fat==0){
                    if ((sD+1)==7){Ssfw="母亲节";lObj.innerHTML="母亲节"}
                }
                else if (fat<9){
                    if ((sD+1)==((7-fat)+8)){Ssfw="母亲节";lObj.innerHTML="母亲节"}
                }
            }
            if ((SM+1)==6){    //父亲节
                if (mat==0){
                    if ((sD+1)==14){Ssfw="父亲节";lObj.innerHTML="父亲节"}
                }
                else if (mat<9){
                    if ((sD+1)==((7-mat)+15)){Ssfw="父亲节";lObj.innerHTML="父亲节"}
                }
             }
             if (s.length<=0){    //设置节气的颜色
                s=cld[sD].solarTerms;
                if(s.length>0) s = s.fontcolor('limegreen');        
             }
             if(s.length>0) {lObj.innerHTML=s;Slfw=s;}    //节气
             if ((Slfw!=null)&&(Ssfw!=null)){
                lObj.innerHTML=Slfw+"/"+Ssfw;
             }
             
             if(cld[sD].isToday)
    alert(lObj.innerHTML);
                           
          }
          else { //非日期
             sObj.innerHTML = '';
             lObj.innerHTML = '';
          }
       }
    }运行一下那个例子,在drawCld中添加红色的那两行,再运行一下,然后你应该知道怎么做了
      

  2.   

    alert(sObj.innerHTML + '\r\n' + lObj.innerHTML); 
      

  3.   

     var lunarInfo=new Array(
    0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
    0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
    0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
    0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
    0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
    0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
    0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
    0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
    0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
    0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
    0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
    0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
    0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
    0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
    0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
     
    var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
    var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");
    var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
    var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');
    var nStr2 = new Array('初','十','廿','卅');
    //公历节日......
    ......
    function getJR(SY,SM,day)
    {
    SM = SM - 1;
    var str='';

    var TF=true;
       var p1=p2="";
       var i,sD,s,size;
       cld = new calendar(SY,SM);
       //str += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【'+Animals[(SY-4)%12]+'】';    //生肖
       for(i=0;i<42;i++) {
          //sObj=eval('SD'+ i);
      //lObj=eval('LD'+ i);
          //sObj.className = '';
          str = '';
          sD = i - cld.firstWeek;
          if(sD>-1 && sD<cld.length) { //日期内
              //sObj.innerHTML = sD+1;
              
             
              
             //if(cld[sD].isToday){ sObj.style.color = '#9900FF';} //今日颜色
             //else{sObj.style.color = '';}
             /*if(cld[sD].lDay==1){ //显示农历月
                str += '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
             }
             else{ str += cDay(cld[sD].lDay);}    //显示农历日*/
            var Slfw=Ssfw=null;
            s=cld[sD].solarFestival;
            for (var ipp=0;ipp<lFtv.length;ipp++){    //农历节日
                if (parseInt(lFtv[ipp].substr(0,2))==(cld[sD].lMonth)){
                    if (parseInt(lFtv[ipp].substr(2,4))==(cld[sD].lDay)){
                         str =lFtv[ipp].substr(5);
                        Slfw=lFtv[ipp].substr(5);
                    }
                }
                if (12==(cld[sD].lMonth)){    //判断是否为除夕
                    if (eve==(cld[sD].lDay)){ str ="除夕";Slfw="除夕";}
                }
            }
            for (var ipp=0;ipp<sFtv.length;ipp++){    //公历节日
                if (parseInt(sFtv[ipp].substr(0,2))==(SM+1)){
                    if (parseInt(sFtv[ipp].substr(2,4))==(sD+1)){
                         str =sFtv[ipp].substr(5);
                        Ssfw=sFtv[ipp].substr(5);
                    }
                }
            }
            if ((SM+1)==5){    //母亲节
                if (fat==0){
                    if ((sD+1)==7){Ssfw="母亲节"; str ="母亲节"}
                }
                else if (fat<9){
                    if ((sD+1)==((7-fat)+8)){Ssfw="母亲节"; str ="母亲节"}
                }
            }
            if ((SM+1)==6){    //父亲节
                if (mat==0){
                    if ((sD+1)==14){Ssfw="父亲节"; str ="父亲节"}
                }
                else if (mat<9){
                    if ((sD+1)==((7-mat)+15)){Ssfw="父亲节"; str ="父亲节"}
                }
             }
             if (s.length<=0){    //设置节气的颜色
                s=cld[sD].solarTerms;
                if(s.length>0) s = s.fontcolor('limegreen');        
             }
             if(s.length>0) { str =s;Slfw=s;}    //节气
             if ((Slfw!=null)&&(Ssfw!=null)){
                 str =Slfw+"/"+Ssfw;
             }
             
              if(sD+1==day)break;
                                  
          }
          else { //非日期
              str = '';
          }
       }
       
       return str;
    }alert('2015, 2, 18: ' + getJR(2015, 2, 18));这个getJR,可以得到指定日期的节日累死了,好久没写js,都忘得差不多了
      

  4.   

    还是哥来帮你吧<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试</title>
    <script type="text/javascript">
    <!--
        var V = [//阳历
                {date: "0101", name: "元旦节"},
                {date: "0214", name: "情人节"},
                {date: "0305", name: "学雷锋纪念日"},
                {date: "0308", name: "妇女节"},
                {date: "0312", name : "植树节"},
                {date: "0401", name : "愚人节"},
                {date: "0501", name : "劳动节"},
                {date: "0504", name : "青年节"},
                {date: "0601", name : "国际儿童节"},
                {date: "0701", name : "中国GD诞辰"},
                {date: "0801", name : "建军节"},
                {date: "0910", name : "中国教师节"},
                {date: "1001", name : "国庆节"},
                {date: "1224", name : "平安夜"},
                {date: "1225", name : "圣诞节"}
            ];function doIt()
    {
    var myDate = new Date();
    var month = myDate.getMonth()+1;
    var day = myDate.getDate(); var currentNum = parseInt(month.toString()+day.toString());//当前月日数
    var tempNum, minNum=9999, minIndex;//临时数,最小数和最小数索引
    for(var i=0;i<V.length;i++){
    tempNum = Math.abs(parseInt(V[i].date) - currentNum);
    if(tempNum < minNum){
    minNum = tempNum;//只存最小数
    minIndex = i;//数组索引
    }
    }
    alert("最近节日:"+V[minIndex].date + V[minIndex].name );
    }//-->
    </script>
    </head>
    <body>
    <input type="button" value="测试" onclick="doIt();" />
    </body>
    </html>
      

  5.   


    哥,还是你了解我啊,知道我想要什么但是算法还有点问题啊0101有个节日
    0201也有一个节日今天是0129,但是返回的还是0101的节日,好伤脑筋啊,好费脑子啊,我想了一会儿头就大了
    妹子昨天那个没仔细看,这个应该没问题了:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试</title>
    <script type="text/javascript">
    <!--
    var V = [//阳历
        {date: "0101", name: "元旦节"},
        {date: "0214", name: "情人节"},
        {date: "0305", name: "学雷锋纪念日"},
        {date: "0308", name: "妇女节"},
        {date: "0312", name : "植树节"},
        {date: "0401", name : "愚人节"},
        {date: "0501", name : "劳动节"},
        {date: "0504", name : "青年节"},
        {date: "0601", name : "国际儿童节"},
        {date: "0701", name : "中国GD诞辰"},
        {date: "0801", name : "建军节"},
        {date: "0910", name : "中国教师节"},
        {date: "1001", name : "国庆节"},
        {date: "1224", name : "平安夜"},
        {date: "1225", name : "圣诞节"}
    ];// 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天
    Date.prototype.diff = function(date){
      return (this.getTime() - date.getTime())/(24 * 60 * 60 * 1000);
    }function doIt()
    {
    var myDate = new Date();
    var month = myDate.getMonth()+1;
    var day = myDate.getDate(); var currentNum = parseInt(month.toString()+day.toString());//当前月日数
    var differenceVal, minNum=9999, minIndex;//临时数,最小数和最小数索引 for(var i=0;i<V.length;i++){
    var holiday = new Date(myDate.getFullYear()+"/"+V[i].date.substr(0,2)+"/"+V[i].date.substr(2,2));//节假日
    differenceVal = Math.abs(myDate.diff(holiday));
    if(differenceVal < minNum){
    minNum = differenceVal;//只存最小数
    minIndex = i;//数组索引
    }
    }
    alert("最近节日:"+V[minIndex].date + V[minIndex].name );
    }
    //-->
    </script>
    </head>
    <body>
    <input type="button" value="测试" onclick="doIt();" />
    </body>
    </html>
      

  6.   


    var V = [//阳历
                {date: "0101", name: "元旦节"},
                {date: "0214", name: "情人节"},
                {date: "0305", name: "学雷锋纪念日"},
                {date: "0308", name: "妇女节"},
                {date: "0312", name : "植树节"},
                {date: "0401", name : "愚人节"},
                {date: "0501", name : "劳动节"},
                {date: "0504", name : "青年节"},
                {date: "0601", name : "国际儿童节"},
                {date: "0701", name : "中国GD诞辰"},
                {date: "0801", name : "建军节"},
                {date: "0910", name : "中国教师节"},
                {date: "1010", name : "国庆节"},
                {date: "1224", name : "平安夜"},
                {date: "1225", name : "圣诞节"}
            ];
        var D = new Date('2015/06/25');
        var n = ('0' + (D.getMonth() + 1)).slice(-2) + ('0' + D.getDate()).slice(-2);
        var result = (function(){
         var arr = [];
         for(var i in V){
         (n * 1 < V[i].date * 1) && arr.push(V[i]);
        }
        return arr.shift().name;
        })();
        console.info('离当前日期最近的节日为:' + result);
      

  7.   

    上边的时间是我测试用的,改成当前时间吧 var D = new Date();
      

  8.   

    上边的时间是我测试用的,改成当前时间吧 var D = new Date();
    不好意思,突然想到一个问题,就是如果V中的数据不是按顺序排列的话,结果就不对了。修改如下:var V = [
        {date: "1224", name : "平安夜"},
                {date: "0101", name: "元旦节"},
                {date: "0910", name : "中国教师节"},
                {date: "0214", name: "情人节"},
                {date: "0501", name : "劳动节"},
                {date: "0305", name: "学雷锋纪念日"},
                {date: "0308", name: "妇女节"},
                {date: "0312", name : "植树节"},
                {date: "0701", name : "中国GD诞辰"},
                {date: "0401", name : "愚人节"},
                {date: "0504", name : "青年节"},
                {date: "0601", name : "国际儿童节"},
                {date: "0801", name : "建军节"},
                {date: "1010", name : "国庆节"},
                {date: "1225", name : "圣诞节"},
                {date: "1111", name : "光棍节"}
            ];    V.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
        // var D = new Date('2015/10/30');//获取指定日期的最近节日
        var D = new Date();
        var n = ('0' + (D.getMonth() + 1)).slice(-2) + ('0' + D.getDate()).slice(-2),k = 0;
        for(var i in V) n * 1 > V[i].date * 1 && k++;
        console.info('离当前日期最近的节日为:' + V.slice(k).shift().name);
      

  9.   

    听到楼主提到公历转农历,心生兴趣,特在网上查了下资料,最终将楼主需要的完整答案搞出来了
    废话不多说了,完整代码如下:需要下载calendar.js<!DOCTYPE>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="calendar.js"></script>
    <style>  
    </style>  
    </head>
    <body>
        <div id="lunar"></div>
        <div id="solar"></div>
    </body>
    <script type='text/javascript'>
        var V = 
        [//公历
            {date: "1224", name : "平安夜"},
            {date: "0101", name: "元旦节"},
            {date: "0910", name : "中国教师节"},
            {date: "0214", name: "情人节"},
            {date: "0501", name : "劳动节"},
            {date: "0305", name: "学雷锋纪念日"},
            {date: "0308", name: "妇女节"},
            {date: "0312", name : "植树节"},
            {date: "0701", name : "中国GD诞辰"},
            {date: "0401", name : "愚人节"},
            {date: "0504", name : "青年节"},
            {date: "0601", name : "国际儿童节"},
            {date: "0801", name : "建军节"},
            {date: "1010", name : "国庆节"},
            {date: "1225", name : "圣诞节"},
            {date: "1111", name : "光棍节"}
        ];
        var T = 
        [//农历
            {date:"0101",name:"春节"},
            {date:"0115",name:"元宵节"},
            {date:"0505",name:"端午节"},
            {date:"0815",name:"中秋节"},
            {date:"0909",name:"重阳节"},
            {date:"1208",name:"腊八节"},
            {date:"1230",name:"除夕"}
        ]
        
        function recently(V,T){
            V = V || [],T = T || [],result = {};
            V.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
            T.sort(function(a,b){return a.date < b.date ? -1 : 1;});//按date大小升序排列
            var D = new Date(),y = D.getFullYear(),m = D.getMonth() + 1,d = D.getDate();        //获取最近的公历节日
            var n = ('0' + m).slice(-2) + ('0' + d).slice(-2),k = 0;
            for(var i in V) n * 1 > V[i].date * 1 && k++;
            k = k >= V.length ? 0 : k;
            result.gl = V.slice(k).shift();
            
            //获取最近的农历节日
            var nl = calendar.lunar2solar(y,m,d);
            n = ('0' + nl.lMonth).slice(-2) + ('0' + nl.lDay).slice(-2),k = 0;
            for(var i in T) n * 1 > T[i].date * 1 && k++;
            k = k >= V.length ? 0 : k;
            result.nl = T.slice(k).shift();        return result;
        }
        var o = recently(V,T);
        document.getElementById('lunar').innerHTML = '离当前日期最近的节日(公历):' + o.gl.name;
        document.getElementById('solar').innerHTML = '离当前日期最近的节日(农历):' + o.nl.name;
    </script>
    </html>