你把分给我,我就告诉你,怎么样???/* 首先,保存公历农历之间的转换信息:以任意一年作为起点,把从这一年起若干年(依需要而定)的农历信息保存起来. 要保存一年的信息,只要两个信息就够了:1.农历每个月的大小;2.今年是否有闰月,闰几月以及闰月的大小.用一个整数来保存这些信息就足够了.具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉12位(无闰月)或13位(有闰月),再用高四位来表示闰月的月份,没有闰月记为0.例如:2000年的信息数据是0xc96,化成二进制就是110010010110B,表示的含义是:1,2,5,8,10,11月大,其余月份小.2001年的农历信息数据是0x1a95(因为闰月,所以有13位),具体的就是1,2,4,5,8,10,12月大,其余月份小(0x1a95=1101010010101B),4月的后面那一个0表示的是闰4月小,接着的那个1表示5月大.这样就可以用一个数组来保存这些信息. 在这里用数组CalendarDate[]来保存这些信息. 具体算法: 1.计算处所求时间到起始年正月初一的天数. 2.从起始年份开始,减去每一月的天数,一直到剩余的天数没有下一个多为止.此时,CalendarDate[]的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月.如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月份数后面一个月,则这个月就是闰月,如果在闰月的后面,则要减去1才能得到月份数.剩余的天数就是农历日,农历时用(公历时+1)/2就可以简单的得到了.具体代码如下: 公历转换农历 */ var CalendarDate=new Array(20); var madd=new Array(12); var day=new Date(); var tgString="甲乙丙丁戊己庚辛壬癸"; var dzString="子丑寅卯辰巳午未申酉戌亥"; var numString="一二三四五六七八九十"; var monString="正二三四五六七八九十冬腊"; var weekString="日一二三四五六"; var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪"; var cYear; var cMonth; var cHour; var cDateString; var DateString;function init() { CalendarDate[0]=0x41A95; CalendarDate[1]=0xD4A; CalendarDate[2]=0xDA5; CalendarDate[3]=0x20B55; CalendarDate[4]=0x56A; CalendarDate[5]=0x7155B; CalendarDate[6]=0x25D; CalendarDate[7]=0x92D; CalendarDate[8]=0x5192B; CalendarDate[9]=0xA95; CalendarDate[10]=0xB4A; CalendarDate[11]=0x416AA; CalendarDate[12]=0xAD5; CalendarDate[13]=0x90AB5; CalendarDate[14]=0x4BA; CalendarDate[15]=0xA5B; CalendarDate[16]=0x60A57; CalendarDate[17]=0x52B; CalendarDate[18]=0xA93; CalendarDate[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=day.getYear(); if (tmp<1900) tmp+=1900; total=(tmp-2001)*365+Math.floor((tmp-2001)/4)+madd[day.getMonth()]+day.getDate()-23; if (day.getYear()%4==0 && day.getMonth()>1) total++; for (m=0;m>=0;m++) { k=(CalendarDate[m]<0xfff)?11:12; for (n=k;n>=0;n--) { if (total<=29+GetBit(CalendarDate[m],n)) { isEnd=true; break; } total=total-29-GetBit(CalendarDate[m],n); } if (isEnd) break; } cYear=2001+m; cMonth=k-n+1; cDay=total; if (k==12) { if (cMonth==Math.floor(CalendarDate[m]/0x10000+1)) cMonth=1-cMonth; if (cMonth>Math.floor(CalendarDate[m]/0x10000+1)) cMonth--; } cHour=Math.floor((day.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+=" " tmp+=dzString.charAt((cHour-1)%12); tmp+="时"; cDateString=tmp; }function GetDateString() { var today=new Date();//时间循环时一定要是内部变量 var t1=today.getYear(); var time time=t1+"-" time+=(today.getMonth()+1)+"-" time+=today.getDate()+" " time+="星期"+weekString.charAt(today.getDay())+" " time+=today.getHours()+":" time+=(today.getMinutes()<10)?"0":"" time+=today.getMinutes()+":" time+=(today.getSeconds()<10)?"0":"" time+=today.getSeconds()+" " time+=(today.getHours()<=12&&today.getHours()>0)?"AM":"PM" DateString=time; document.time.showtime.value=time; setTimeout('GetDateString()', 1000); }function chinatime() { alert("现在农历是:"+cDateString); }document.write("<form name='time'>"); document.write("<input type=button name=showtime onClick='chinatime()'>") document.write("</form>"); init(); e2c(); GetDateString(); GetcDateString();把上面这些存为一个js文件,然后在你的网页中调用这个文件就可以了,这个不用我教你了吧。
[email protected]
echo "农历壬午年(马)七月十九";
?>
呵呵,楼主,给分,你说我对你的问题回答的不对,
我将之发到了CSDN的文档里,不过好象发的过程中有点了问题。
首先,保存公历农历之间的转换信息:以任意一年作为起点,把从这一年起若干年(依需要而定)的农历信息保存起来.
要保存一年的信息,只要两个信息就够了:1.农历每个月的大小;2.今年是否有闰月,闰几月以及闰月的大小.用一个整数来保存这些信息就足够了.具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉12位(无闰月)或13位(有闰月),再用高四位来表示闰月的月份,没有闰月记为0.例如:2000年的信息数据是0xc96,化成二进制就是110010010110B,表示的含义是:1,2,5,8,10,11月大,其余月份小.2001年的农历信息数据是0x1a95(因为闰月,所以有13位),具体的就是1,2,4,5,8,10,12月大,其余月份小(0x1a95=1101010010101B),4月的后面那一个0表示的是闰4月小,接着的那个1表示5月大.这样就可以用一个数组来保存这些信息.
在这里用数组CalendarDate[]来保存这些信息.
具体算法:
1.计算处所求时间到起始年正月初一的天数.
2.从起始年份开始,减去每一月的天数,一直到剩余的天数没有下一个多为止.此时,CalendarDate[]的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月.如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月份数后面一个月,则这个月就是闰月,如果在闰月的后面,则要减去1才能得到月份数.剩余的天数就是农历日,农历时用(公历时+1)/2就可以简单的得到了.具体代码如下:
公历转换农历
*/
var CalendarDate=new Array(20);
var madd=new Array(12);
var day=new Date();
var tgString="甲乙丙丁戊己庚辛壬癸";
var dzString="子丑寅卯辰巳午未申酉戌亥";
var numString="一二三四五六七八九十";
var monString="正二三四五六七八九十冬腊";
var weekString="日一二三四五六";
var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear;
var cMonth;
var cHour;
var cDateString;
var DateString;function init()
{
CalendarDate[0]=0x41A95;
CalendarDate[1]=0xD4A;
CalendarDate[2]=0xDA5;
CalendarDate[3]=0x20B55;
CalendarDate[4]=0x56A;
CalendarDate[5]=0x7155B;
CalendarDate[6]=0x25D;
CalendarDate[7]=0x92D;
CalendarDate[8]=0x5192B;
CalendarDate[9]=0xA95;
CalendarDate[10]=0xB4A;
CalendarDate[11]=0x416AA;
CalendarDate[12]=0xAD5;
CalendarDate[13]=0x90AB5;
CalendarDate[14]=0x4BA;
CalendarDate[15]=0xA5B;
CalendarDate[16]=0x60A57;
CalendarDate[17]=0x52B;
CalendarDate[18]=0xA93;
CalendarDate[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=day.getYear();
if (tmp<1900)
tmp+=1900;
total=(tmp-2001)*365+Math.floor((tmp-2001)/4)+madd[day.getMonth()]+day.getDate()-23;
if (day.getYear()%4==0 && day.getMonth()>1)
total++;
for (m=0;m>=0;m++)
{
k=(CalendarDate[m]<0xfff)?11:12;
for (n=k;n>=0;n--)
{
if (total<=29+GetBit(CalendarDate[m],n))
{
isEnd=true;
break;
}
total=total-29-GetBit(CalendarDate[m],n);
}
if (isEnd)
break;
}
cYear=2001+m;
cMonth=k-n+1;
cDay=total;
if (k==12)
{
if (cMonth==Math.floor(CalendarDate[m]/0x10000+1))
cMonth=1-cMonth;
if (cMonth>Math.floor(CalendarDate[m]/0x10000+1))
cMonth--;
}
cHour=Math.floor((day.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+=" "
tmp+=dzString.charAt((cHour-1)%12);
tmp+="时";
cDateString=tmp;
}function GetDateString()
{
var today=new Date();//时间循环时一定要是内部变量
var t1=today.getYear();
var time
time=t1+"-"
time+=(today.getMonth()+1)+"-"
time+=today.getDate()+" "
time+="星期"+weekString.charAt(today.getDay())+" "
time+=today.getHours()+":"
time+=(today.getMinutes()<10)?"0":""
time+=today.getMinutes()+":"
time+=(today.getSeconds()<10)?"0":""
time+=today.getSeconds()+" "
time+=(today.getHours()<=12&&today.getHours()>0)?"AM":"PM"
DateString=time;
document.time.showtime.value=time;
setTimeout('GetDateString()', 1000);
}function chinatime()
{
alert("现在农历是:"+cDateString);
}document.write("<form name='time'>");
document.write("<input type=button name=showtime onClick='chinatime()'>")
document.write("</form>");
init();
e2c();
GetDateString();
GetcDateString();把上面这些存为一个js文件,然后在你的网页中调用这个文件就可以了,这个不用我教你了吧。