2007年11月10日最新修改
感谢daisylh的完善,请在miy=i;下加上break;
添加了对Firefox的支持,请在var yy=D.getYear();下加上 if ( navigator.appName == "Netscape" ) yy += 1900;
注:07年即将过去,本程序也即将过期了,不过令人高兴的是,daisylh已经将程序完善到2020年,并且一直维护着,您可以前往 http://www.cnblogs.com/daisylh/archive/2007/03/31/694892.html 找到更新程序。
2007年2月27日最新修改
感谢VaneyLee的提醒,现在程序已经修改,现在没有问题了。
由于当初我写的时候是下午16:30分,所以当我把时钟调到年初一的时候,也是16:30分,由于疏忽,所以将年初一16:30分的时间记录为07年初始时间了,所以导致了如果您在16:30分以前看的话,就是上一天了。
程序红色黑体部分是修改的部分。
感谢daisylh的完善,daisylh将程序完善到2020年,您可以访问他的博客查看。
“http://www.cnblogs.com/daisylh/archive/2007/03/31/694892.html”
昨天,在百度知道上帮人家回答了一个问题,解决了人家网站上阳历转阴历的错误。
错误在于这个javascript程序使用的是枚举法来转换阴历阳历,使得这个程序只能使用到2006年。由于这个程序比较简单,所以我根据了一些阴历的常识,对程序进行了修改,现在程序能用到2007年。
不过让我很寒心,提问者选了这样一个最佳答案:“我的QQ是XXXXX,我帮你解决。”我想,就算那人真的帮你解决了问题,可这样写有意思么,如果别人也遇到了这个问题,能再得到帮助吗?不说了。
下面给出这个程序的代码,修改的地方我用红色表示出来了,并适当做了注释,相信有点编程能力的人都能看懂,并能自己修改了。
把这段代码插入到你想显示的位置就可以了。最底下黄色的语句就是用于显示的CAL函数,你可以根据实际情况进行修改。
<script language=JavaScript>
<!--
var bsYear;
var bsDate;
var bsWeek;
var arrLen=9; //数组长度
var sValue=0; //当年的秒数
var dayiy=0; //当年第几天
var miy=0; //月份的下标
var iyear=0; //年份标记
var dayim=0; //当月第几天
var spd=86400; //每天的秒数
var year1999="30;29;29;30;29;29;30;29;30;30;30;29"; //354
var year2000="30;30;29;29;30;29;29;30;29;30;30;29"; //354
var year2001="30;30;29;30;29;30;29;29;30;29;30;29;30"; //384
var year2002="30;30;29;30;29;30;29;29;30;29;30;29"; //354
var year2003="30;30;29;30;30;29;30;29;29;30;29;30"; //355
var year2004="29;30;29;30;30;29;30;29;30;29;30;29;30"; //384
var year2005="29;30;29;30;29;30;30;29;30;29;30;29"; //354
var year2006="30;29;30;29;30;30;29;29;30;30;29;29;30"; //384
var year2007="29;29;30;29;29;30;29;30;30;30;29;30"; //这个表示2007年阴历每月的天数。注意,由于2006年是阴历闰年,所以有13个月,而2007年不是闰年。
var month1999="正月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
var month2001="正月;二月;三月;四月;闰四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
var month2004="正月;二月;闰二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
var month2006="正月;二月;三月;四月;五月;六月;七月;闰七月;八月;九月;十月;十一月;十二月"
//这里是闰年的表示,如果不是闰年,就不需要加了。主要注意带闰字的月。
var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十";
var Ys=new Array(arrLen);
Ys[0]=919094400;Ys[1]=949680000;Ys[2]=980265600;
Ys[3]=1013443200;Ys[4]=1044028800;Ys[5]=1074700800;
Ys[6]=1107878400;Ys[7]=1138464000;
Ys[8]=1171728000;//这个数字是大年初一0:00的时候,javascript的D.getTime() / 1000的值
var Yn=new Array(arrLen); //农历年的名称
Yn[0]="己卯年";Yn[1]="庚辰年";Yn[2]="辛巳年";
Yn[3]="壬午年";Yn[4]="癸未年";Yn[5]="甲申年";
Yn[6]="乙酉年";Yn[7]="丙戌年";
Yn[8]="丁亥年";
var D=new Date();
var yy=D.getYear();
if ( navigator.appName == "Netscape" ) yy+= 1900; //Firefox支持
var mm=D.getMonth()+1;
var dd=D.getDate();
var ww=D.getDay();
if (ww==0) ww="<font color=#EACF4F> 星期日 ";
if (ww==1) ww=" 星期一 ";
if (ww==2) ww=" 星期二 ";
if (ww==3) ww=" 星期三 ";
if (ww==4) ww=" 星期四 ";
if (ww==5) ww=" 星期五 ";
if (ww==6) ww="<font color=#EACF4F> 星期六 ";
ww=ww;
var ss=parseInt(D.getTime() / 1000);
if (yy<100) yy="19"+yy;
for (i=0;i<arrLen;i++)
if (ss>=Ys[i]){
iyear=i;
sValue=ss-Ys[i]; //当年的秒数
}
dayiy=parseInt(sValue/spd)+1; //当年的天数
var dpm=year1999;
if (iyear==1) dpm=year2000;
if (iyear==2) dpm=year2001;
if (iyear==3) dpm=year2002;
if (iyear==4) dpm=year2003;
if (iyear==5) dpm=year2004;
if (iyear==6) dpm=year2005;
if (iyear==7) dpm=year2006;
if (iyear==8) dpm=year2007;
dpm=dpm.split(";");
var Mn=month1999;
if (iyear==2) Mn=month2001;
if (iyear==5) Mn=month2004;
if (iyear==7) Mn=month2006;
Mn=Mn.split(";");
var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十";
Dn=Dn.split(";");
dayim=dayiy;
var total=new Array(13);
total[0]=parseInt(dpm[0]);
for (i=1;i<dpm.length-1;i++) total[i]=parseInt(dpm[i])+total[i-1];
for (i=dpm.length-1;i>0;i--)
if (dayim>total[i-1]){
dayim=dayim-total[i-1];
miy=i;
break;
}
bsWeek=ww;
bsDate=yy+"年"+mm+"月";
bsDate2=dd+"日";
bsYear="农历"+Yn[iyear];
bsYear2=Mn[miy]+Dn[dayim-1];
if (ss>=Ys[8]||ss<Ys[0]) bsYear=Yn[8];
function CAL(){
document.write("<font color=#9A172D>"+bsDate+"</font><font color=#9A172D>"+bsDate2+"</font><font color=#9A172D>");
document.write(bsWeek+"<font color=#9A172D>");
document.write(bsYear+bsYear2);
}
//-->
</script>
<script language=javascript>CAL();</script>