最精致的日历式日期输入控件
点击次数:20 次 发布日期:2008-11-26 23:19:19 作者:源代码网
|
<HEAD> <TITLE>最精致的日历式日期输入控件 (Smart Ver 1.00)</TITLE> </HEAD> <style> body { font-size:12px; font-family:"Tahoma"; } td { font-size:12px; font-family:"Tahoma"; } .inputdate { border:1px solid #7287c6; text-align: center; font-size: 12px; font-style: normal; height: 16px; } </style> <SCRIPT LANGUAGE="JavaScript"> <!-- /******************************************************************** more javascript from http://www.smallrain.net 时间:2004-01-01 作者:Smart 功能:日历式日期选择控件 参数: 说明: 1.输入框直接调用用以下代码 <Script>DateBox("InputName","DateValue")</Script> 其中:InputName 为输入日期的文本框.注:不能为空. DateValue 为输入日期的文本框默认日期值.格式为:YYYY-MM-DD.如2004-01-01 此值可以不填或为空.则默认值为当天日期.(客户端) 2.其它"按钮"调用用以下代码 CallDate("InputName") 其中:InputName 为输入日期的文本框.注:不能为空. 修改区 时间: 修改人: 原因: ********************************************************************/ /*基本参数*/ var Frw=106; //日历宽度 var Frh=137; //日历高度 var Frs=4; //影子大小 var Hid=true;//日历是否打开 /*创建框架*/ document.writeln("<Div id=Calendar Author=smart scrolling="no" frameborder=0 style="border:0px solid #EEEEEE ;position: absolute; width: "+Frw+"; height: "+Frh+"; z-index: 0; filter :"progid:DXImageTransform.Microsoft.Shadow(direction=135,color=#AAAAAA,strength="+Frs+")" ;display: none"></Div>"); /*取得今日日期*/ function GetTodayDate() { today= new Date(); y= today.getYear(); m= (today.getMonth() + 1); if (m<10) { m="0"+m; } d= today.getDate(); if (d<10) { d="0"+d; } return y+"-"+m+"-"+d } /*输入今天日期*/ function SetTodayDate(InputBox) { HiddenCalendar(); InputBox.value=GetTodayDate(); } /*取某年某月第一天的星期值(月份-1)*/ function GetFirstWeek(The_Year,The_Month) { return (new Date(The_Year,The_Month-1,1)).getDay() } /*取某年某月中总天数*/ function GetThisDays(The_Year,The_Month) { return (new Date(The_Year,The_Month,0)).getDate() } /*取某年某月上个月中总天数*/ function GetLastDays(The_Year,The_Month) { return (new Date(The_Year,The_Month-1,0)).getDate() } /*判断是否是闰年*/ function RunNian(The_Year) { if ((The_Year%400==0) || ((The_Year%4==0) && (The_Year%100!=0))) return true; else return false; } /* 判断日期(YYYY-MM-DD)的日期是否正确 */ function DateIsTrue(asDate){ var lsDate = asDate + ""; var loDate = lsDate.split("-"); if (loDate.length!=3) return false; var liYear = parseFloat(loDate[0]); var liMonth = parseFloat(loDate[1]); var liDay = parseFloat(loDate[2]); if ((loDate[0].length>4)||(loDate[1].length>2)||(loDate[2].length>2)) return false; if (isNaN(liYear)||isNaN(liMonth)||isNaN(liDay)) return false; if ((liYear<1800)||(liYear>2500)) return false; if ((liMonth>12)||(liMonth<=0)) return false; if (GetThisDays(liYear,liMonth)<liDay) return false; return !isNaN(Date.UTC(liYear,liMonth,liDay)); } /*取某年某月的周值*/ function GetCountWeeks(The_Year,The_Month) { var Allday; Allday = 0; if (The_Year>2000) { for (i=2000 ;i<The_Year; i++) if (RunNian(i)) Allday += 366; else Allday += 365; for (i=2; i<=The_Month; i++) { switch (i) { case 2 : if (RunNian(The_Year)) Allday += 29; else Allday += 28; break; case 3 : Allday += 31; break; case 4 : Allday += 30; break; case 5 : Allday += 31; break; case 6 : Allday += 30; break; case 7 : Allday += 31; break; case 8 : Allday += 31; break; case 9 : Allday += 30; break; case 10 : Allday += 31; break; case 11 : Allday += 30; break; case 12 : Allday += 31; break; } } } return (Allday+6)%7; } /*输入框显示*/ function InputValue(InputBox,Year,Month,Day) { if (Month<10) { Month="0"+Month } if (Day<10) { Day="0"+Day } InputBox.value=Year+"-"+Month+"-"+Day } //上一月 function ForwardMonth(InputBox,Year,Month,Day) { Month=Month-1; if (Month<1) { Month=12; Year=Year-1; if (Year<1800) Year=2500; } Day=((GetThisDays(Year,Month)<Day)?GetThisDays(Year,Month):Day) Hid=false; ShowCalendar(InputBox,Year,Month,Day) } //下一月 function NextMonth(InputBox,Year,Month,Day) { Month=Month+1; if (Month>12) { Month=1; Year=Year+1; if (Year>2500) Year=1800; } Day=((GetThisDays(Year,Month)<Day)?GetThisDays(Year,Month):Day) Hid=false; ShowCalendar(InputBox,Year,Month,Day) } //上一年 function ForwardYear(InputBox,Year,Month,Day) { Year=Year-1; if (Year<1800) Year=2500; Day=((GetThisDays(Year,Month)<Day)?GetThisDays(Year,Month):Day) Hid=false; ShowCalendar(InputBox,Year,Month,Day) } //下一年 function NextYear(InputBox,Year,Month,Day) { Year=Year+1; if (Year>2500) Year=1800; Day=((GetThisDays(Year,Month)<Day)?GetThisDays(Year,Month):Day) Hid=false; ShowCalendar(InputBox,Year,Month,Day) } /*其它事件显示日历*/ function OpenDate(where) { GetCalendar(where) } /*根据输入框中的日期显示日历*/ function GetCalendar(where) { Hid=false; var Box_Name=where.name; var Box_value=where.value; if (DateIsTrue(Box_value)) { loDate = Box_value.split("-"); Y= parseFloat(loDate[0]); M= parseFloat(loDate[1]); D= parseFloat(loDate[2]); ShowCalendar(where,Y,M,D); } else { today= new Date(); y= today.getYear(); m= (today.getMonth() + 1); d=today.getDate(); ShowCalendar(where,y,m,d); } } /*隐藏日历*/ function HiddenCalendar() { document.all.Calendar.style.display="none"; } function CloseCalendar() { if (Hid) document.all.Calendar.style.display="none"; Hid=true; } /*显示日历*/ function ShowCalendar(InputBox,The_Year,The_Month,The_Day) { var Now_Year=(The_Year==null?2004:The_Year); var Now_Month=(The_Month==null?1:The_Month); var Now_Day=(The_Day==null?1:The_Day); var Box_Name="window.parent.document.all."+InputBox.name; var fw=GetFirstWeek(Now_Year,Now_Month); var ld=GetLastDays(Now_Year,Now_Month); var td=GetThisDays(Now_Year,Now_Month); var isnd=false;//是否是下个月的日期 var d=1,w=1; var FrameContent; var Frl,Frt,Winw,Winh; /*显示的位置*/ Winw=document.body.offsetWidth; Winh=document.body.offsetHeight; Frl=InputBox.getBoundingClientRect().left-2; Frt=InputBox.getBoundingClientRect().top+InputBox.clientHeight; if (((Frl+Frw+Frs)>Winw)&&(Frw+Frs<Winw)) Frl=Winw-Frw-Frs; if ((Frt+Frh+Frs>Winh)&&(Frh+Frs<Winh)) Frt=Winh-Frh-Frs; document.all.Calendar.style.display=""; document.all.Calendar.style.left=Frl; document.all.Calendar.style.top=Frt; //显示日历内容 FrameContent=" <table onselectstart="return false;" border="0" cellpadding="0" cellspacing="0" bgcolor="#395592" width="100%" height="15" style="color:white;font-weight:bolder;border:0px solid">"+" <tr> "; FrameContent+="<td width=8>"; FrameContent+="<img src="http://www.zzchn.com/edu/20070601/inc/-.gif" width="8" height="11" border="0" alt="上一年" style="cursor:hand" onclick="parent.ForwardYear (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+Now_Day+")">"; FrameContent+="</td> "; FrameContent+="<td vAlign=middle align="center">"; FrameContent+=Now_Year; FrameContent+="年"; FrameContent+="</td> "; FrameContent+="<td width=8>"; FrameContent+="<img src="http://www.zzchn.com/edu/20070601/inc/+.gif" width="8" height="11" border="0" alt="下一年" style="cursor:hand" onclick="parent.NextYear (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+Now_Day+")">"; FrameContent+="</td> "; FrameContent+="<td width=8>"; FrameContent+="<img src="http://www.zzchn.com/edu/20070601/inc/-.gif" width="8" height="11" border="0" alt="上一月" style="cursor:hand" onclick="parent.ForwardMonth (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+Now_Day+")">"; FrameContent+="</td> "; FrameContent+="<td vAlign=middle align="center" width="16">"; FrameContent+=Now_Month; FrameContent+="</td> "; FrameContent+="<td vAlign=middle align="center" width="13">"; FrameContent+="月"; FrameContent+="</td> "; FrameContent+="<td width=8>"; FrameContent+="<img src="http://www.zzchn.com/edu/20070601/inc/+.gif" width="8" height="11" border="0" alt="下一月" style="cursor:hand" onclick="parent.NextMonth (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+Now_Day+")">"; FrameContent+="</td>"+" "; FrameContent+="</tr>"+" "; FrameContent+="</table>"+" "; FrameContent+="<table onselectstart="return false;" border="0" cellpadding="0" cellspacing="1" width="100%" bgcolor="#CCCCCC">"+" "; FrameContent+="<tr bgcolor="#F5F5F5">"+" "; FrameContent+="<td><center>一</center></td>"+" "; FrameContent+="<td><center>二</center></td>"+" "; FrameContent+="<td><center>三</center></td>"+" "; FrameContent+="<td><center>四</center></td>"+" "; FrameContent+="<td><center>五</center></td>"+" "; FrameContent+="<td><center>六</center></td>"+" "; FrameContent+="<td><center><font color="#FF0000">日</font></center></td>"+" "; FrameContent+="</tr>"+" "; //如果本月第一天是星期一或星期天.应加上七.保证可以看到上个月的日期 if (fw<2) tf=fw+7; else tf=fw; FrameContent+="<tr bgcolor="#FFFFFF">"+" "; //第一行上月日期 for (l=(ld-tf+2);l<=ld;l++) { FrameContent+="<td onclick="parent.ForwardMonth (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+l+")" style="cursor:hand"><center><font color="#BBBBBB">"+l+"</font></center></td>"+" "; w++; } //第一行本月日期 for (f=tf;f<=7;f++) { //星期天但非输入日期 if (((w%7)==0)&&(d!=Now_Day)) FrameContent+="<td onMouseOver="this.style.background="#E1E1E1"" onMouseOut="this.style.background="#FFFFFF"" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()" style="cursor:hand"><center><font color="#FF0000">"+d+"</font></center></td>"+" "; //日期为输入日期 else if (d==Now_Day) FrameContent+="<td style="background:#420042;cursor:hand" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()"><center><font color="#FFFFFF">"+d+"</font></center></td>"+" "; //其它 else FrameContent+="<td onMouseOver="this.style.background="#E1E1E1"" onMouseOut="this.style.background="#FFFFFF"" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()" style="cursor:hand"><center>"+d+"</center></td>"+" "; d++; w++; } FrameContent+="</tr>"+" "; w=1; for (i=2;i<7;i++) { FrameContent+="<tr bgcolor="#FFFFFF">"+" "; for (j=1;j<8;j++) { if (isnd)//下个月的日期 FrameContent+="<td style="cursor:hand" onclick="parent.NextMonth (window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+")"><center><font color="#BBBBBB">"+d+"</font></center></td>"+" "; else//本月的日期 { //星期天但非输入日期 if (((w%7)==0)&&(d!=Now_Day)) FrameContent+="<td onMouseOver="this.style.background="#E1E1E1"" onMouseOut="this.style.background="#FFFFFF"" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()" style="cursor:hand"><center><font color="#FF0000">"+d+"</font></center></td>"+" "; //日期为输入日期 else if (d==Now_Day) FrameContent+="<td style="background:#420042;cursor:hand" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()"><center><font color="#FFFFFF">"+d+"</font></center></td>"+" "; //其它 else FrameContent+="<td onMouseOver="this.style.background="#E1E1E1"" onMouseOut="this.style.background="#FFFFFF"" onClick="parent.InputValue(window.parent.document.all."+InputBox.name+","+Now_Year+","+Now_Month+","+d+");parent.HiddenCalendar()" style="cursor:hand"><center>"+d+"</center></td>"+" "; } //判断是否为本月的日期 if (d==td) { isnd=true; d=0; } w++; d++; } FrameContent+="</tr>"+" "; } FrameContent+="</table>"+" "; FrameContent+="<table onselectstart="return false;" cellpadding="0" cellspacing="0" bgcolor="#F5F5F5" width="100%" height="15">"+" <tr> "; FrameContent+="<td title="今日:"+GetTodayDate()+"" style="cursor:hand" onclick="parent.SetTodayDate(window.parent.document.all."+InputBox.name+")">"; FrameContent+="<font color=red>今日:</font>"+GetTodayDate(); FrameContent+="</td> "; FrameContent+="<td>"; FrameContent+="<img src="http://www.zzchn.com/edu/20070601/inc/close.gif" width="13" height="13" border="0" alt="关闭" style="cursor:hand" onclick="parent.HiddenCalendar()">"; FrameContent+="</td> "; FrameContent+="</tr> "; document.all.Calendar.innerHTML=FrameContent; document.all.Calendar.style.display=""; } /*显示输入框*/ function DateBox(sBoxName, sDfltValue) { if (sBoxName==null) sBoxName="Date_Box" if ((sDfltValue==null)||!(DateIsTrue(sDfltValue))) sDfltValue= GetTodayDate() else { DateStr = sDfltValue.split("-"); Y= parseFloat(DateStr[0]); M= (parseFloat(DateStr[1])<10)?("0"+parseFloat(DateStr[1])):parseFloat(DateStr[1]); D= (parseFloat(DateStr[2])<10)?("0"+parseFloat(DateStr[2])):parseFloat(DateStr[2]); sDfltValue=Y+"-"+M+"-"+D } document.write("<input size="10" readonly class="inputdate" name=""+sBoxName+"" value=""+sDfltValue+"" onclick="GetCalendar(window.document.all."+sBoxName+")" >"); } document.onclick = CloseCalendar; //--> </SCRIPT> <BODY topmargin="0" leftmargin="0"> 点击输入框调用日历.<Script>DateBox("Test1")</Script> <Script>DateBox("Test2","2004-01-01")</Script> 其它事件调用日历. <input type="text" class="inputdate" size="10" name="Test3" readonly> <input type="button" class="inputdate" onclick="OpenDate(Test3)" value="显示日历"> </BODY> </HTML> 源代码网推荐 源代码网供稿. |
