最佳浏览:800*600像素IE6/Opera8/Firefox2及以上
banner
本站动态
本站搜索

关 键 词
搜索范围

网上调查

网站用什么布局好?
表格布局
纯CSS的div布局
div+table
根据情况而定

广告推广区
年月日联动JS程序
发布时间:2007-5-31 13:24:21



Google

    一直以来,在做注册时出生日期的部分比较麻烦,因为每个月的天数不同,1,3,5,7,8,10,12这几个月为三十一天,4,6,9,11这几个月为三十天,其实这都还算容易,可以写一个小小的js检测月份就可以判断三十天还是三十一天,最麻烦的是二月,二月在平年跟润年的天数是不一样的,如果全为二十八天或二十九天的话也好做,所以还要判断是否为润年,润年的算法有两点:1,被4整除但不被100整除,2,被400整除,所以不能让程序自动选择天数的话,经常会得到一个错误的日期,造成注册失败。
    下面写了一段js检测代码来自动检测天数,后面附有示例,有兴趣可以看看。
    服务器端:如果要演示后面的示例,则服务器端需支持ASP,本站所有ASP程序在未特别说明的情况下,使用的都为VBS(Visual Basic Scripting)脚本
    客户端:支持JS且未禁用JS的浏览器
    原理:每选择一次年份或月份就自动触发调用JS函数month_day(),该函数取得当前选择的年份和月份值,进行月份和平润年检测之后,自动给日期下拉条添加天数设置
<script type="text/javascript">
//年月日联动
//不想说乔丹2007-5-23编写
//  http://www.wgg.com.cn    http://www.wucq.cn
// wggipkhgef@yahoo.com.cn
function month_day(){
b_m=document.getElementById("b_month");//月份下拉条ID名为b_month
b_d=document.getElementById("b_day");//日期下拉条ID名为b_day
b_y=document.getElementById("b_year");//年份下拉条ID名为b_y
if (b_d.hasChildNodes){
for (i=0;i<b_d.childNodes.length;i++){
b_d.removeChild(b_d.childNodes[0]);
i-=1;
}
}
for (i=1;i<=28;i++)
{//添加1-28的选项,2月先作28天处理
opt=document.createElement("option");
opt.appendChild(document.createTextNode(i));
b_d.appendChild(opt);
b_d.childNodes[i-1].setAttribute("value",i);
}
if (b_m.value!=2)
{//不是2月则再添加29和30日
opt=document.createElement("option");
opt.appendChild(document.createTextNode("29"));
b_d.appendChild(opt);
b_d.childNodes[28].setAttribute("value","29"); 

opt=document.createElement("option");
opt.appendChild(document.createTextNode("30"));
b_d.appendChild(opt);
b_d.childNodes[29].setAttribute("value","30"); 
if (b_m.value==1||b_m.value==3||b_m.value==5||b_m.value==7||b_m.value==8||b_m.value==10||b_m.value==12)
{//1,3,5,7,8,10,12月再添加31日
opt=document.createElement("option");
opt.appendChild(document.createTextNode("31"));
b_d.appendChild(opt);
b_d.childNodes[30].setAttribute("value","31"); 
}
}
else
{
if(((parseInt(b_y.value)%4==0)&&(parseInt(b_y.value)%100!=0))||(parseInt(b_y.value)%400==0))   //被4整除但不被100整除或被400整除

{//处理润年2月,润年2月添加29日
opt=document.createElement("option");
opt.appendChild(document.createTextNode("29"));
b_d.appendChild(opt);
b_d.childNodes[28].setAttribute("value","29");
}
}
}
</script>

引用示例:
m_d.asp

出生日期<select name="b_year" id="b_year" onChange="javascript:month_day();"><% for y=(year(now)-100) to year(now) %><option value="<%=y%>"><%=y%></option><% next %></select>年<select name="b_month" id="b_month" onChange="javascript:month_day();"><option value="<%=month(now)%>" selected="selected">请选择……</option><% for m=1 to 12 %><option value="<%=m%>"><%=m%></option><% next %></select>月<select name="b_day" id="b_day"><option value="<%=day(now)%>" selected="selected">请选择……</option></select>日


附:这样得到正确的年月日之后,要组合成正确的日期的话就很容易了,如:
<%   '下面为asp代码
ymd=formatdatetime(trim(request.form("b_year"))&"-"&trim(request.form("b_month"))&"-"&trim(request.form("b_day")),2)
%>