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;	//公历时间字符串
//-----------------------------------------------------
function init()
{
	//初始化
	//公元2001年——2020年的农历每年的月份大小及闰月信息
	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)
{
	//获取一个整数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;	//有些浏览器是从1900开始计数，如在NetScape中，101表示2001年
        //计算时间到起点日期辛巳（2001）年正月初一的天数
        total=(tmp-2001)*365	//每年365天
		+Math.floor((tmp-2001)/4)	//闰年366天，所以还要加上到起点的闰年数
		+madd[TheDate.getMonth()]	//再加上本月一号到本年元旦的天数，注意getMonth()返回0表示1月
		+TheDate.getDate()	//再加上本日到本月一号的天数
		-23;	//在减去本年正月初一到本年元旦的天数，得到本日到辛巳（2001）年正月初一的天数
	if (TheDate.getYear()%4==0&&TheDate.getMonth()>1)total++;	//如果本年是闰年而本月又在2月以后，加上2月多的一天
	//从起点开始，在本日到起点日期的天数中一个月一个月的减
	for(m=0;;m++)
        {
                //判断本年是否闰月，用以确定月份信息的起点。有闰月有13位（0~12），无12位（0~11）
                k=(CalendarData[m]<0xfff)?11:12;
                for(n=k;n>=0;n--)
                {
                	//如果不够减
                       if(total<=29+GetBit(CalendarData[m],n))
                        {
                                isEnd=true;	//设置标志
                                break;	////退出内层循环
                        }
                        /*够减，减去一个月的天数
			先减去29天如果月大，则对应的信息位为1，
			又减去一天*/
			total=total-29-GetBit(CalendarData[m],n);
                }
                if(isEnd)break;	//如果不够减退出的内层循环，退出外层循环
        }
        cYear=2001 + m;	//农历年=起始年份+下标
        cMonth=k-n+1;	//农历月=本年的月份数（k+1）减去已经减去的月份数（n）
        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
	{	switch(cMonth)
		{
	        case 11: tmp+="十一"; break;
			case 12: tmp+="十二"; break;
			default: 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);
	else
		tmp+="日";
	if(cHour==13)tmp+="夜";	//23点以后是夜子时
	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()); 
	return tmp;
}
//--------------------------------------------------------------------
init();
e2c();
DateStr=GetDateString();
GetcDateString();
document.write("<p class='size10' align=\'center\'>",DateStr,"&nbsp;&nbsp;农历:",cDateString,"</p>");
//-------------------------------------------------------------------------
function bbimg(o){
	var zoom=parseInt(o.style.zoom, 10)||100;zoom+=event.wheelDelta/12;if (zoom>0) o.style.zoom=zoom+'%';
	return false;
}
