<%@ Control Language="C#" ClassName="Calendar" %>
<script type="text/javascript">
<!--
/*
//
// @Written By popduke@ //
//
*/
/*使用说明:
//1.此控件必须放在runat=server的form里面,如果form的ID有变化,请将控件的FormID属性设置为该ID的值。 //
//2.时间跨度为1950-2049,有需求的同志可以修改年度限制Line73 and
Line121。
//
//3.服务器端调用Date即为显示的日期,客户端?要客户端你用这个干嘛?
*/
//-->
</script>
<script runat="server">
protected string strFormID = "form1";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
hfDate.Value = DateTime.Now.ToShortDateString();
}
public DateTime Date
{
get { return DateTime.Parse(hfDate.Value); }
}
public string FormID
{
get { return strFormID; }
set { strFormID = (value == "") ? "form1" : value; }
}
</script>
<center>
<table border="-1" style="height: 19px;">
<tr>
<td>
<input id="txtYear" maxlength="4" onchange="return txtYear_change()" onkeydown="return txtYear_keydown()"
style="width: 31px; border-top-style: none; border-right-style: none; border-left-style: none;
height: 17px; border-bottom-style: none;" type="text" />-
<input id="txtMonth" maxlength="2" onchange="return txtMonth_change()" onkeydown="return txtMonth_keydown()"
style="width: 15px; border-top-style: none; border-right-style: none; border-left-style: none;
height: 17px; border-bottom-style: none;" type="text" />-
<input id="txtDate" maxlength="2" onchange="return txtDate_change()" onkeydown="return txtDate_keydown()"
style="width: 15px; border-top-style: none; border-right-style: none; border-left-style: none;
height: 17px; border-bottom-style: none;" type="text" />
</td>
</tr>
</table>
<asp:HiddenField ID="hfDate" runat="server" />
</center>
<script type="text/javascript">
var frmParent = <%=strFormID %>;
var arrStr = frmParent.<%=hfDate.ClientID %>.value.split("-");
frmParent.txtYear.value = arrStr[0];
frmParent.txtMonth.value = StringFormat(arrStr[1]);
frmParent.txtDate.value = StringFormat(arrStr[2]);
var iYear = parseInt(frmParent.txtYear.value,10);
var iMonth = parseInt(frmParent.txtMonth.value,10);
var iDate = parseInt(frmParent.txtDate.value,10);
ChangeServerValue();
function txtYear_keydown()
{
iYear = parseInt(frmParent.txtYear.value,10);
if(event.keyCode == 40)
iYear++;
else if(event.keyCode == 38)
iYear--;
else if((event.keyCode == 9)||(event.keyCode == 8)||(isnumber(event.keyCode)))
return true;
else
return false;
if(iYear < 1950) iYear = 1950;
if(iYear > 2049) iYear = 2049;
frmParent.txtYear.value = iYear;
ChangeDate();
ChangeServerValue();
return true;
}
function txtMonth_keydown()
{
iMonth = parseInt(frmParent.txtMonth.value,10);
if(event.keyCode == 40)
iMonth++;
else if(event.keyCode == 38)
iMonth--;
else if((event.keyCode == 9)||(event.keyCode == 8)||(isnumber(event.keyCode)))
return true;
else
return false;
if(iMonth < 1) iMonth = 1;
if(iMonth > 12) iMonth = 12;
frmParent.txtMonth.value = StringFormat(iMonth);
ChangeDate();
ChangeServerValue();
return true;
}
function txtDate_keydown()
{
iDate = parseInt(frmParent.txtDate.value,10);
if(event.keyCode == 40)
iDate++;
else if(event.keyCode == 38)
iDate--;
else if((event.keyCode == 9)||(event.keyCode == 8)||(isnumber(event.keyCode)))
return true;
else
return false;
if(iDate < 1) iDate++;
if(iDate > getMonthMaxDays(iYear,iMonth)) iDate = getMonthMaxDays(iYear,iMonth);
frmParent.txtDate.value = StringFormat(iDate);
ChangeServerValue();
return true;
}
function txtYear_change()
{
iYear = parseInt(frmParent.txtYear.value,10);
if(iYear < 1950) iYear = 1950;
if(iYear > 2049) iYear = 2049;
frmParent.txtYear.value = iYear;
if(getMonthMaxDays(iYear,iMonth) < iDate)
ChangeDate();
ChangeServerValue();
}
function txtMonth_change()
{
iMonth = parseInt(frmParent.txtMonth.value,10);
if(iMonth < 1) iMonth = 1;
if(iMonth > 12) iMonth = 12;
frmParent.txtMonth.value = StringFormat(iMonth);
ChangeDate();
ChangeServerValue();
}
function txtDate_change()
{
iDate = parseInt(frmParent.txtDate.value,10);
if(iDate < 1) iDate++;
if(iDate > getMonthMaxDays(iYear,iMonth)) iDate = getMonthMaxDays(iYear,iMonth);
frmParent.txtDate.value = StringFormat(iDate);
ChangeServerValue();
}
function ChangeDate()
{
if(getMonthMaxDays(iYear,iMonth) < iDate)
{
frmParent.txtDate.value = getMonthMaxDays(iYear,iMonth);
iDate = getMonthMaxDays(iYear,iMonth);
}
}
function ChangeServerValue()
{
frmParent.<%=hfDate.ClientID %>.value = iYear + "-" + iMonth + "-" + iDate;
}
function isLeapYear(iYear) {
return (iYear%100==0) ? (iYear%400==0) : (iYear%4==0);
}
function getMonthMaxDays(iYear,iMonth) {
var mday=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if (isLeapYear(iYear)) mday[1]++;
return mday[iMonth - 1];
}
function StringFormat(Number)
{
return (Number < 10) ? ("0" + Number) : Number;
}
function isnumber(keycode) {
return ((keycode >= 48 && keycode <= 57) || (keycode >= 96 && keycode <= 105));
}
</script>

个人签名--------------------------------------------------------------------------------
.