azhong的WEB日历(公历、农历)

showCalendar(snongli,sInput,soutput,sStartD,sEndD,sStartDate)

//1.snongli是否是农历,
//2.sInput日历弹出位置的控件的名称,
//3.soutput取得日期的控件名称,

//4.sStartD开始有效时间,
//5.sEndD截至有效时间,
//6.sStartDate,为农历里存放相应公历的控件名

本日历显示的日期范围为(如果超过界限会自动转到当前年份):

公历不限,农历1900.1-2100.12(公历时间)

调用示例:

公历:<input name="cc" type="text" id="cc" value="" onClick="javascript:showCalendar(false,'cc','cc','1004-08-2','2500-01-29',null)">
农历:<input name="dd" type="text" id="dd" value="" onClick="javascript:showCalendar(true,'dd','dd','1978-08-1','2100-01-29','ee')"><input name="ee" type="hidden" value="2100-12-07" />

//JS源文件====================================================

//==================================================== WEB 页面显示部分 开始=====================================================
//----------------------------------------------------------------------
//转发时请保留此声明信息,这段声明不并会影响你的速度!
//*******************   AZhong的WEB日历(公历、农历) V1.0  *********************************
//作者:AZhong(阿钟)
//网站:http://azhong.szbangong.com
//电子邮件:wcbm@163.com
//QQ:184258447
//版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件
//发送一份给作者.
//***********************************************************************
var strFrame,yy,mm,today,CFrame;  //CFrame存放日历层的HTML代码
today = new Date();
yy=today.getFullYear();
mm=today.getMonth();
today.setHours(0);today.setMinutes(0);today.setSeconds(0);today.setMilliseconds(0);
document.writeln('<div id="azhongDateLayer" name="azhongDateLayer" Author="azhong" style="position:absolute;width:146px; height:198px;display:none;z-index: 1;">&nbsp;222</div>');

strFrame = '<style>';
strFrame += 'body{text-decoration:none;}';
strFrame += 'body{padding: 0pt 0pt 0pt;}';
strFrame += 'body{margin: 0pt 0pt 0pt;}';
strFrame += 'a {text-decoration: none;font-weight: bold;color:#000000;}';
strFrame += 'a:link {text-decoration: none;font-weight: bold;color:#000000;}';
strFrame += 'a:hover {text-decoration: none;font-weight: bold;color:#000000;}';
strFrame += 'a:active {text-decoration: none;font-weight: bold;color:#000000;}';
strFrame += 'input.button{BORDER-RIGHT: #cdcdcd 1px solid;BORDER-TOP: #cdcdcd 1px solid;BORDER-LEFT: #cdcdcd 1px solid;';
strFrame += 'BORDER-BOTTOM: #cdcdcd 1px solid;BACKGROUND-COLOR: #EFEFEF;font-family:宋体;}';
strFrame += 'td{FONT-SIZE: 9px;font-family:宋体; TEXT-ALIGN: center;text-decoration:none;}';
strFrame += '.title {FONT-SIZE: 12px;text-decoration:none;}';
strFrame += '</style>';

/*strFrame = '';*/
strFrame += '<table id=tbl0 width=100% height=100% border=1 align=center cellpadding=0 cellspacing=0 bordercolor=#cdcdcd bgcolor=#cdcdcd Author="azhong">';
strFrame += '<tr Author="azhong">';
strFrame += '<td width=100% height=18 bgcolor=#FFFFFF><table border=0 cellspacing=1 cellpadding=0 width=100% height=18 Author="azhong">';
strFrame += '<tr align=center Author="azhong">';
strFrame += '<td width=12% align=center bgcolor=#cdcdcd style="font-size:12px;cursor: hand;color: #EFEFEF" οnclick="javascript:redraw(0,-1);" title="向前翻 1 月" Author="azhong"><b Author="azhong">&lt;</b> </td>';
strFrame += '<td width="43%" align=center style="font-size:12px;cursor:default" οnmοuseοver="style.backgroundColor=/'#cdcdcd/'" οnmοuseοut="style.backgroundColor=/'#EFEFEF/'" οnfοcus="javascript:WriteSelect(t_yy,t_yy.innerText.split(/'年/')[0],/'y/');" title="点击这里选择年份" id="t_yy" Author="azhong"></td>';
strFrame += '<td Author="azhong"><span id=yy_nongli style="font-size:12px;cursor:default" Author="azhong"></span></td>';
strFrame += '<td width="33%" align=center style="font-size:12px;cursor:default" οnmοuseοver="style.backgroundColor=/'#cdcdcd/'" οnmοuseοut="style.backgroundColor=/'#EFEFEF/'" οnfοcus="javascript:WriteSelect(t_mm,t_mm.innerText.split(/'月/')[0],/'m/');" title="点击这里选择月份" id="t_mm" Author="azhong"></td>';
strFrame += '<td width="12%" bgcolor=#cdcdcd align=center style="font-size:12px;cursor: hand;color: #EFEFEF" οnclick="javascript:redraw(0,1);" title="向后翻 1 月" Author="azhong"><b Author="azhong">&gt;</b></td>';
strFrame += '</tr>';
strFrame += '</table></td>';
strFrame += '</tr>';
strFrame += '<tr Author="azhong">';
strFrame += '<td width="100%" height=18><table border=1 cellspacing=0 cellpadding=0 bgcolor=#cdcdcd BORDERCOLORLIGHT=#cdcdcd BORDERCOLORDARK=#FFFFFF width="100%" height=20 style="cursor:default" Author="azhong">';
strFrame += '<tr align=center valign=bottom Author="azhong">';
strFrame += '<td style="font-size:12px;color:red" Author="azhong">日</td>';
strFrame += '<td style="font-size:12px;color:#FFFFFF" Author="azhong">一</td>';
strFrame += '<td style="font-size:12px;color:#FFFFFF" Author="azhong">二</td>';
strFrame += '<td style="font-size:12px;color:#FFFFFF" Author="azhong">三</td>';
strFrame += '<td style="font-size:12px;color:#FFFFFF" Author="azhong">四</td>';
strFrame += '<td style="font-size:12px;color:#FFFFFF" Author="azhong">五</td>';
strFrame += '<td style="font-size:12px;color:#00CC00" Author="azhong">六</td>';
strFrame += '</tr>';
strFrame += '</table></td>';
strFrame += '</tr>';
strFrame += '<tr Author="azhong">';
strFrame += '<td width="100%" height=120><TABLE border=1 cellspacing=2 cellpadding=0 bordercolorlight=#cdcdcd bordercolordark=#FFFFFF bgcolor=#EFEFEF width="100%" height=120 id="rilibody" Author="azhong">';
for(i=0;i<6;i++){
 strFrame +='<tr Author="azhong">';
 for(j=1;j<=7;j++)strFrame +="<td id=d"+(i*7+j)+" style='font-size:12px;' align=center οnclick=tdClick(this) Author=azhong></td>";
 strFrame +="</tr>";
}
strFrame += '</TABLE></td>';
strFrame += '</tr>';
strFrame += '<tr Author="azhong">';
strFrame += '<td Author="azhong"><table border=0 cellspacing=1 cellpadding=0 width="100%" Author="azhong" bgcolor=#FFFFFF>';
strFrame += '<tr Author="azhong">';
strFrame += '<td align=left Author="azhong"><input type=button class=button value="<<" title="向前翻 1 年" οnclick="redraw(-1,0);" οnfοcus="this.blur()" style="font-size: 12px; height: 18px" Author="azhong">';
strFrame += '<input class=button title="向前翻 1 月" type=button value="< " οnclick="redraw(0,-1);" οnfοcus="this.blur()" style="font-size: 12px; height: 18px" Author="azhong"></td>';
strFrame += '<td align=center Author="azhong"><input type=button class=button value="今 天" οnclick="getnow();" οnfοcus="this.blur()" title="当前日期" style="font-size: 12px; height: 18px; cursor:hand" id="changnow" Author="azhong"></td>';
strFrame += '<td align=right><input type=button class=button value=" >" οnclick="redraw(0,1);" οnfοcus="this.blur()" title="向后翻 1 月" style="font-size: 12px; height: 18px" Author="azhong">';
strFrame += '<input type=button class=button value=">>" title="向后翻 1 年" οnclick="redraw(1,0);" οnfοcus="this.blur()" style="font-size: 12px; height: 18px" Author="azhong"></td>';
strFrame += '</tr>';
strFrame += '</table></td>';
strFrame += '</tr>';
strFrame += '</table>';
document.getElementById("azhongDateLayer").innerHTML=strFrame;
CFrame = document.getElementById("azhongDateLayer");
var nongli,inputname,outputname,startname,curday,Tstart,Tend
//==================================================== WEB 页面显示部分 结束=====================================================
function showCalendar(snongli,sInput,soutput,sStartD,sEndD,sStartDate)
{
 //1.snongli是否是农历,
 //2.sInput日历弹出位置的控件的名称,
 //3.soutput取得日期的控件名称,
 
 //4.sStartD开始有效时间,
 //5.sEndD截至有效时间,
 //6.sStartDate,为农历里存放相应公历的控件名
 nongli   = snongli;
 inputname = document.getElementById(sInput);
 outputname = document.getElementById(soutput);
 startname = document.getElementById(sStartDate);
 Tstart  = new Date(sStartD.split('-')[0],sStartD.split('-')[1]-1,sStartD.split('-')[2],0,0,0,0);
 a = new Date(2005,7,5);
 Tend  = new Date(sEndD.split('-')[0],sEndD.split('-')[1]-1,sEndD.split('-')[2],0,0,0,0);
 if(CFrame.style.display=="block"){CFrame.style.display="none";return;}

 var eT=0,eL=0,p=inputname;
 var sT=document.body.scrollTop,sL=document.body.scrollLeft;
 var eH=p.height,eW=p.width;
 //如果是农历,则默认日期为隐藏文件输入框的值,否则(如果输出框内的值为空则取当前日期)
 if (startname)
  {curday=new Date(startname.value.split('-')[0],startname.value.split('-')[1]-1,startname.value.split('-')[2],0,0,0,0);}
 else if(outputname.value=="")
  curday=today;
 else
  curday=new Date(outputname.value.split('-')[0],outputname.value.split('-')[1]-1,outputname.value.split('-')[2],0,0,0,0);
 yy = curday.getFullYear();
 mm = curday.getMonth();
 if(yy<1900||yy>2500){yy=today.getFullYear();mm=today.getMonth();}
 var ttop  = inputname.offsetTop;     //TT控件的定位点高
 var thei  = inputname.clientHeight;  //TT控件本身的高
 var tleft = inputname.offsetLeft;    //TT控件的定位点宽
 var ttyp  = inputname.type;          //TT控件的类型
 while (inputname = inputname.offsetParent){ttop+=inputname.offsetTop; tleft+=inputname.offsetLeft;}
 CFrame.style.top  = ((ttyp=="image")? ttop+thei : ttop+thei+6)+'px';
 CFrame.style.left = tleft+'px';
 CFrame.style.display="block";
 drawCalendar(yy,mm);
}
function hideCalendar()
{
 CFrame.style.display="none";
}
//====================================================日历显示部分 开始=====================================================
function drawCalendar(y,m)//画日历
{
 if (nongli&&(y>2100||y<1901)){y=today.getFullYear();}
 var x=new Date(y,m,1),mv=x.getDay(),d=x.getDate(),de;
 //x为当月的1号,mv为1号为周几
 yy=x.getFullYear();mm=x.getMonth();
 document.getElementById("t_yy").innerHTML=yy+"年";
 document.getElementById("t_mm").innerHTML=(mm+1)+"月";
 //清空日历
 for(var i=1;i<=mv;i++)
 {
  de = eval("document.getElementById('d"+i+"')");
  de.innerHTML="";
  de.bgColor="";
 }
 //画日历
 if (!nongli)
 { CFrame.style.width='146px';CFrame.style.height='198px';document.getElementById("rilibody").height='130px';document.getElementById("yy_nongli").innerText="";document.getElementById("changnow").value="今天";
 }
 else {CFrame.style.width='244px';CFrame.style.height='264px';document.getElementById("rilibody").height='196px';document.getElementById("yy_nongli").width="17%";document.getElementById("yy_nongli").innerText=FormatLunarYear(yy);
 document.getElementById("t_yy").width="34%";document.getElementById("t_mm").width="25%";
 document.getElementById("yy_nongli").title="农历"+FormatLunarYear(yy);
 document.getElementById("changnow").value=" 今 天 ";
 }
 var totaldate = new Date(y,m+1,0);
 var z,dayi=1;
 while(dayi<(totaldate.getDate()+1))
 {
  z = new Date(yy,mm,dayi);
  de = eval("document.getElementById('d"+(dayi+mv)+"')");
  if(z.getTime()==today.getTime())
   de.bgColor="#00CC00";
  else{
   if(z.getTime()==curday.getTime())
    de.bgColor="#FFD700";
   else
    de.bgColor="#e0e0e0";
  }
  if(z.getTime()==today.getTime())
  {//如果为当前日期
   if (z.getTime()>Tstart.getTime()&Tend.getTime()>z.getTime())
   de.innerHTML="<a href=javascript:setDate("+dayi+");><font color=red>"+dayi+cnongli(yy,mm+1,dayi)+"</font></a>";
   else
   de.innerHTML="<font color=red><b>"+dayi+cnongli(yy,mm+1,dayi)+"</b></font>";
  }
  else if (z.getTime()>Tstart.getTime()&Tend.getTime()>z.getTime())
  {//开始日期后结束日期前的显示
   de.innerHTML="<a href=javascript:setDate("+dayi+"); class=bt><font color=#0066FF>"+dayi+cnongli(yy,mm+1,dayi)+"</font></a>";
  }
  else
  {//开始日期前结束日期后的显示
   de.innerHTML="<font color=#888888>"+dayi+cnongli(yy,mm+1,dayi)+"</font>"; 
  }
 dayi++;
 }
 while(dayi+mv<=42)
 {
  de = eval("document.getElementById('d"+(dayi+mv)+"')");
  de.innerHTML="";
  de.bgColor="";
  dayi++;
 }
}
//====================================================日历显示部分 结束=====================================================
//====================================================日历修改部分 开始=====================================================
function redraw(y,m){
 drawCalendar(yy+y,mm+m);
}
function HiddSelect(obj,values){
 if (obj==1)
  document.getElementById("t_yy").innerHTML = values+"年";
 else
  document.getElementById("t_mm").innerHTML = values+"月";
}
function WriteSelect(obj,values,action){
 if(values=="")return;
 var StrArray=[],year;
 if(action=="y"){
  for(var i=0;i<101;i++){
   year=values-50+i;
   if(!((year<1901||year>2100)&&nongli)){
   StrArray[i]="<option value='"+year+"'"+(values==year?"selected":"")+" Author='azhong'>"+year+"年</option>/n";}
  }
  obj.innerHTML="<select id='select1' Author='azhong' style='width:67px;height:15px;margin-bottom:-5px' οnchange='drawCalendar(Math.floor(this.value),"+mm+");' οnblur='HiddSelect(1,this.value);document.all.select1.style.display=/"none/"'>/n"+StrArray.join("")+"</select>";
  document.getElementById("select1").focus();
 }
 if(action=="m"){
  for(var i=1;i<13;i++){StrArray[i]="<option value='"+i+"'"+(i==values?"selected":"")+" Author='azhong'>"+i+"月</option>/n";}
  obj.innerHTML="<select id='select2' style='width:47;height:15px;margin-bottom:-5px' Author='azhong' οnchange='drawCalendar("+yy+",Math.floor(this.value)-1);' οnblur='HiddSelect(2,this.value);'>/n"+StrArray+"</select>";
  document.getElementById("select2").focus();
  }
 }
function getnow(){
var now=new Date();
drawCalendar(now.getYear(),now.getMonth());
}
function tdClick(td){
 var v=td.innerText.split('/n')[0];
 var td_v=td.innerHTML.replace('/n','<br>');
 var replen=td_v.replace('setDate','').length;
 if(replen!=td_v.length){setDate(Math.floor(v));}
}
//====================================================日历修改部分 结束=====================================================
//====================================================设置日期部分 结束=====================================================
function setDate(d)//设置日期
{
 hideCalendar();
 var mmm;
 mmm=mm+1>9?mm+1:"0"+(mm+1);
 var dstr=yy+"-"+(mmm)+"-"+(d>9?d:"0"+d);
 if (nongli)
  outputname.value=setnongli(dstr);
 else
  outputname.value=dstr;
 if (startname){startname.value=dstr;}
 if (Tstart){Tstart.value=dstr;} 
}
//====================================================设置日期部分 结束=====================================================
//====================================================农历显示部分 开始=====================================================
var NongliData=new Array("19416","19168","42352","21717","53856","55632","21844","22191","39632","21970","19168","42422","42192","53840","53909","46415","54944","44450","38320","18807","18815","42160","46261","27216","27968","43860","11119","38256","21234","18800","25958","54432","59984","27285","23263","11104","34531","37615","51415","51551","54432","55462","46431","22176","42420","9695","37584","53938","43344","46423","27808","46416","21333","19887","42416","17779","21183","43432","59728","27296","44710","43856","19296","43748","42352","21088","62051","55632","23383","22176","38608","19925","19152","42192","54484","53840","54616","46400","46752","38310","38335","18864","43380","42160","45690","27216","27968","44870","43872","38256","19189","18800","25776","29859","59984","27480","23232","43872","38613","37600","51552","55636","54432","55888","30034","22176","43959","9680","37584","51893","43344","46240","47780","44368","21977","19360","42416","20854","21183","43312","31060","27296","44368","23378","19296","42726","42208","53856","60005","54576","23200","30371","38608","19195","19152","42192","53430","53855","54560","56645","46496","22224","21938","18864","42359","42160","43600","45653","27951","44448","19299","37759","18936","18800","25776","26790","59999","27424","42692","43759","37600","53987","51552","54615","54432","55888","23893","22176","42704","21972","21200","43448","43344","46240","46758","44368","21920","43940","42416","21168","45683","26928","29495","27296","44368","19285","19311","42352","21732","53856","59752","54560","55968","27302","22239","19168","43476","42192","53584","62034","54560");
function lYearDays(y) {
 var i, sum = 348;
 for(i=0x8000; i>0x8; i>>=1) sum += (NongliData[y-1900] & i)? 1: 0;
 return(sum+leapDays(y));
}
function leapMonth(y) {
 var lm = NongliData[y-1900] & 0xf;
 return(lm==0xf?0:lm);
}
function leapDays(y) {
 if(leapMonth(y)) return( (NongliData[y-1899]&0xf)==0xf? 30: 29);
 else return(0);
}
function monthDays(y,m) {
 if(y==1899&&m==12){return 30;}
 return( (NongliData[y-1900] & (0x10000>>m))? 30: 29 )
}
function Lunar(objDate) {
 var i, leap=0, temp=0;
 var offset   = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;
 for(i=1900; i<2100 && offset>0; i++) {
  temp=lYearDays(i); offset-=temp;
 }
 if(offset<0) {
  offset+=temp; i--;
 }
 this.year = i;
 leap = leapMonth(i);
 this.isLeap = false;
 for(i=1; i<13 && offset>0; i++) {
  if(leap>0 && i==(leap+1) && this.isLeap==false) {
   --i;
   this.isLeap = true;
   temp = leapDays(this.year);
  } else {
   temp = monthDays(this.year, i);
  }
  if(this.isLeap==true && i==(leap+1)) this.isLeap = false;
  offset -= temp;
 }
 if(offset==0 && leap>0 && i==leap+1)
 if(this.isLeap){
  this.isLeap = false;
 } else {
  this.isLeap = true; --i;
 }
 if(offset<0){
  offset += temp; --i;
 }
 this.month = i;
 this.day = offset + 1;
}
// 将农历iLunarYear年格式化成天干地支记年法表示的字符串
function FormatLunarYear(iLunarYear)
{
    var szText1 = new String("甲乙丙丁戊己庚辛壬癸");
    var szText2 = new String("子丑寅卯辰巳午未申酉戌亥");
    var strYear;

    strYear = szText1.substr((iLunarYear - 4) % 10, 1);
    strYear = strYear + szText2.substr((iLunarYear - 4) % 12, 1);
    return strYear + "年";
}
// 将农历iLunarMonth月格式化成农历表示的字符串
function FormatLunarMonth(iLunarMonth)
{
    var szText = new String("正二三四五六七八九十");
    var strMonth;

    if (iLunarMonth <= 10)
    {
        strMonth = szText.substr(iLunarMonth - 1, 1);
    }
    else if (iLunarMonth == 11) strMonth = "十一";
    else strMonth = "十二";

    return strMonth + "月";
}
// 将农历iLunarDay日格式化成农历表示的字符串
function FormatLunarDay(iLunarDay)
{
    var szText1 = new String("初十廿三");
    var szText2 = new String("一二三四五六七八九十");
    var strDay;
    if ((iLunarDay != 20) && (iLunarDay != 30))
    {
        strDay = szText1.substr((iLunarDay - 1) / 10, 1) + szText2.substr((iLunarDay - 1) % 10, 1);
    }
    else if (iLunarDay != 20)
    {
        strDay = szText1.substr(iLunarDay / 10, 1) + "十";
    }
    else
    {
        strDay = "二十";
    }
    return strDay;
}
function cnongli(stry,strm,strd){
var sDObj, lDObj,strl
 sDObj = new Date(stry,strm-1,strd,0,0,0,0);
 lDObj = new Lunar(sDObj);
 if (lDObj.day!=1)
  strl = "<br>"+FormatLunarDay(lDObj.day);
 else
   strl = "<br>"+FormatLunarMonth(lDObj.month);
 if (!nongli){strl = "";}
 return strl;
}
function setnongli(strdate){
 var sDObj, lDObj,strl,stry,strm,strd,d,a
 a = strdate.split("-");
 sDObj = new Date(a[0],a[1]-1,a[2],0,0,0,0);
 lDObj = new Lunar(sDObj);
 if (nongli){
 strl = FormatLunarYear(lDObj.year);
 strl = strl+FormatLunarMonth(lDObj.month);
 strl = strl+FormatLunarDay(lDObj.day);}
 else
 strl = strdate;
return strl;
}

function document.onkeyup()  //按Esc键关闭,切换焦点关闭
  {
    if (window.event.keyCode==27){
  hideCalendar();
 }
 else if(document.activeElement)
  if(document.activeElement.getAttribute("Author")==null && document.activeElement != outputname)
  {
   hideCalendar();
  }
  }

function document.onclick() //任意点击时关闭该控件 //ie6的情况可以由下面的切换焦点处理代替
{
  with(window.event)
  { if (srcElement.getAttribute("Author")==null && srcElement != CFrame && srcElement != outputname)
    hideCalendar();
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值