浏览主站 | 站长工具 | 新闻资讯 | 站长学院 | 站长盈利 | HTML教程 | 网址导航 | 站长周刊 | 会员投稿 | 滚动新闻 | RSS
发新话题
打印

公历转阴历算法

公历转阴历算法

[[wiki]wiki[/wiki]][/wiki]<script [wiki]type[/wiki]="text/javascript">
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="鼠[wiki]牛[/wiki]虎兔龙蛇马羊猴鸡狗猪";
var cYear;
var cMonth;
var cDay;
var cHour;
var cDa[wiki]Test[/wiki]ring;
var DateString;
var Browser=navigator.appName;
function init()
{
    CalendarData[0]=0x41A95;
    CalendarData[1]=0xD4A;
    CalendarData[2]=0xDA5;
    CalendarData[3]=0x20B55;
    CalendarData[4]=0[wiki]X5[/wiki]6A;
    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=tr[wiki]UE[/wiki];
                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);
</script>

TOP

农 历  

  农历是我国的一种历法,又称夏历、中历、旧历,俗称阴历。定月的方法是用朔望月[wiki]周期[/wiki]给出,朔所在日为初一,朔望月长约29天半,所以农历大月30天,小月29天。农历平年有十二个月,全年354天或355天,闰年为十三个月,其中某一月为闰月,月名依前一月名而定,如前月是八月,闰月则为闰八月。闰年全年383天或384天。设置闰月的方法是:农历月份中无“中气”的月份则是闰月。  
农历平年、闰年的月数、天数一览表

年 月数 大月天数 小月天数 全年天数 闰月设置方法  
平年 12 30 29 354 大约19年中7个闰月  
闰年 13 30 29 383(或384) 无中气月份为闰月  


二十四节气中四季“节气”和“中气”一览表  

四季 春 夏 秋 冬  
节气 立春 惊蛰 清明 立夏 芒种 小暑 立秋 白露 寒露 立冬 大雪 小寒  
中气 雨水 春分 谷雨 小满 夏至 大暑 处暑 秋分 霜降 小雪 冬至 大寒  
  农历又根据太阳的位置,把太阳年分成二十四个节气,反映寒冷暑热的气候变化,以便家事活动,所以农历实为阴阳历。  


如何转换阴阳历?  

  很多人都一直在找换阴阳历的公式。我也尝试过。曾读过「高平子」天文前辈所着「学历散论」了解古历的变更和阴阳历的缺陷。才知道由於月球转动的不稳定不规则,确定无公式可寻。这也是古代中国每百年必改历的原因。  
阴历最大的问题是在如何置闰。好像不难,因为阴历基本法则如下:
 * 月朔日即是初一  
 * 月以中气得名  
 * 以包含雨水中气月为正月,即是「寅」月  
 * 月无中气者为闰月,以前月同名  

  如果,日月转动循还有规则的话, 推演一套阴阳历转换的公式并不难。问题在有时一个太阴月比一个太阳月还要长。如此一个太阴月就覽wiki]锌[/wiki]赡馨礁鲋衅4怂衅箩岬囊趵旅腿柯业袅耍钡较乱桓觥讣佟谷蛟箩岵诺髡础

TOP

发新话题