如何根据阳历算出阴历  或是根据 阴历来计算出阳历的日期 
  

解决方案 »

  1.   

    这个问题貌似没做过啊,先抢个沙发待高手解决,MARK下
      

  2.   

    给楼主找了个JS的:var CalendarData=new Array(20);
    var madd=new Array(12);
    var TheDate=new Date();
    var tgString="甲乙丙丁戊己庚辛壬癸";
    var dzString="子丑寅卯辰巳午未申酉戌亥";
    var numString="一二三四五六七八九十";
    var monString="正二三四五六七八九十冬腊";
    var weekString="日一二三四五六";
    var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
    var cYear;
    var cMonth;
    var cDay;
    var cHour;
    var cDaTestring;
    var DateString;
    var Browser=navigator.appName;
    function init()
    {
        CalendarData[0]=0x41A95;
        CalendarData[1]=0xD4A;
        CalendarData[2]=0xDA5;
        CalendarData[3]=0x20B55;
        CalendarData[4]=0X56A;
        CalendarData[5]=0x7155B;
        CalendarData[6]=0x25D;
        CalendarData[7]=0x92D;
        CalendarData[8]=0x5192B;
        CalendarData[9]=0xA95;
        CalendarData[10]=0xB4A;
        CalendarData[11]=0x416AA;
        CalendarData[12]=0xAD5;
        CalendarData[13]=0x90AB5;
        CalendarData[14]=0x4BA;
        CalendarData[15]=0xA5B;
        CalendarData[16]=0x60A57;
        CalendarData[17]=0x52B;
        CalendarData[18]=0xA93;
        CalendarData[19]=0x40E95;
        madd[0]=0;
        madd[1]=31;
        madd[2]=59;
        madd[3]=90;
        madd[4]=120;
        madd[5]=151;
        madd[6]=181;
        madd[7]=212;
        madd[8]=243;
        madd[9]=273;
        madd[10]=304;
        madd[11]=334;
    }
    function GetBit(m,n)
    {
        return (m>>n)&1;
    }
    function e2c()
    {
        var total,m,n,k;
        var isEnd=false;
        var tmp=TheDate.getYear();
        if (tmp<1900) tmp+=1900;
        
        total=(tmp-2001)*365
        +Math.floor((tmp-2001)/4)
        +madd[TheDate.getMonth()]
        +TheDate.getDate()
        -23;
        if (TheDate.getYear()%4==0&&TheDate.getMonth()>1)
            total++;
        for(m=0;;m++)
        {
            k=(CalendarData[m]<0xfff)?11:12;
            for(n=k;n>=0;n--)
            {
                if(total<=29+GetBit(CalendarData[m],n))
                {
                    isEnd=true;
                    break;
                }
                total=total-29-GetBit(CalendarData[m],n);
            }
            if(isEnd)break;
        }
        cYear=2001 + m;
        cMonth=k-n+1;
        cDay=total;
        if(k==12)
        {
            if(cMonth==Math.floor(CalendarData[m]/0x10000)+1)
            cMonth=1-cMonth;
            if(cMonth>Math.floor(CalendarData[m]/0x10000)+1)
            cMonth--;
        }
        cHour=Math.floor((TheDate.getHours()+3)/2);
    }
    function GetcDateString()
    {   
        var tmp="";
        tmp+=tgString.charAt((cYear-4)%10); //年干
        tmp+=dzString.charAt((cYear-4)%12); //年支
        tmp+="年(";
        tmp+=sx.charAt((cYear-4)%12);
        tmp+=")";
        if(cMonth<1)
        {
            tmp+="闰";
            tmp+=monString.charAt(-cMonth-1);
        }
        else
            tmp+=monString.charAt(cMonth-1);
        tmp+="月";
        tmp+=(cDay<11)?"初":((cDay<20)?"十":((cDay<30)?"廿":"卅"));
        if(cDay%10!=0||cDay==10)
            tmp+=numString.charAt((cDay-1)%10);
        if(cHour==13)tmp+="夜";
            tmp+=dzString.charAt((cHour-1)%12);
        tmp+="时";
        cDateString=tmp;
        return tmp;
    }
    function GetDateString()
    {
        var tmp="";
        var t1=TheDate.getYear();
        if (t1<1900)t1+=1900;
        tmp+=t1
        +"-"
        +(TheDate.getMonth()+1)+"-"
        +TheDate.getDate()+" "
        +TheDate.getHours()+":"
        +((TheDate.getMinutes()<10)?"0":"")
        +TheDate.getMinutes()
        +" 星期"+weekString.charAt(TheDate.getDay());
        DateString=tmp;
        return tmp;
    }
    init();
    e2c();
    GetDateString();
    GetcDateString();
    document.write(DateString,"<br>",cDateString);