用ASP开发WEB日期选择器

[序]
  在WEB结构程序开发中,日期数据在表单中输入可以采用很多种方法,常见的有:
  1、在文本框中让用户按规定好的日期格式直接输入。这种方法最简单,可是用户使用起来很麻烦,而且程序员还要在后台对输入的日期进行数据验证,所以显得很笨拙;
  2、用下拉列表列出年份、月份、天数由用户选择输入。这种方法更麻烦,用户操作看似比上一种方便了,可是每一个日期输入都需要程序员在后台对年份、月份、天数一一循环列出,而且在列出前或用户输入后还是要对日期信息进行验证,所以这种方法也不可取;
  3、用ActiveX日历控件,在前台输入。这种方法很方便,可是唯一缺点也是最致命的一个弱点:需要每个客户端都要装有ActiveX控件。

 

  最近,笔者用ASP结合JavaScript,开发了这样一个模仿控件式的日期选择器。用户操作更直观、更方便;程序后台实现时可以在每次需要时很方便的调用,而不需要客户端安装任何程序。

  在此,将源代码贡献出来与大家一起分享。

[原理]

  使用页面通过打开定制窗口调用日期选择程序,并将使用页面内的FormName,FiledName元素属性传给日期选择程序。在日期选择程序中,用ASP在后台计算并显示出日历,用户选择后,将日期值再传回使用页面的Filed.value,最后自动关闭弹出窗口完成选择。

[源程序]

 1、sample.htm      (使用页面)
    2、calendar.asp  (日期选择器程序)

1、sample.htm
========================================================
<html>
<head>
<title>Calendar  Sample</title>
</head>
<body>
<form  method="POST"  action="sample.htm"  name="sample">
    <b><font  face="Arial">Sample</font></b><p>
    <font  face="Arial"><span  style="font-size:  9pt;  font-weight:  

700">Date:  </span>
    </font><input  type="text"  name="date"  size="10"  readonly>
    <a  href="#SelectDate"  

onClick="JavaScript:window.open(''calendar.asp?form=sample&field=date''

,'''',''directorys=no,toolbar=no,status=no,menubar=no,scrollbars=no,resi

zable=no,width=190,height=140'');">
    <img  border="0"  src="images/date_picker.gif"  width="24"  

height="16"></a></p>
    <p><input  type="submit"  value="submit"  name="B1"></p>
</form>
</body>
</html>
===========================================================

2、calendar.asp
===========================================================
<%
''WEB  Calendar
''By  Chaiwei  2002-7-31
''--------------------------------

''月份名称定义
Dim  Month_Name(12)
Month_Name(1)  =  "January"
Month_Name(2)  =  "February"
Month_Name(3)  =  "March"
Month_Name(4)  =  "April"
Month_Name(5)  =  "May"
Month_Name(6)  =  "June"
Month_Name(7)  =  "July"
Month_Name(8)  =  "August"
Month_Name(9)  =  "September"
Month_Name(10)  =  "October"
Month_Name(11)  =  "November"
Month_Name(12)  =  "December"

''年份处理,默认值为服务器当前年份
if  request.querystring("year")<>""  then
        Year_var=cint(request.querystring("year"))
else
        Year_var=year(date())
end  if

''上一年、下一年赋值
Previous_year=Year_var-1
Next_year=Year_var+1

''月份处理,默认值为服务器当前月份
if  request.querystring("Month")<>""  then
        Month_var=cint(request.querystring("Month"))
else
        Month_var=month(date())
end  if

''上一月、下一月赋值
if  Month_var<=1  then
        Next_month=Month_var+1
        Previous_month=1
else
        if  Month_var>=12  then
                Next_month=12
                Previous_month=Month_var-1
        else
                Next_month=Month_var+1
                Previous_month=Month_var-1
        end  if
end  if

''当前天数定位计算
First_day=DateSerial(Year_var,Month_var,1)
Current_day=First_day-weekday(First_day)+2

%>
<html>
<head>
<title>Calendar</title>
<Script  Language="JavaScript">

//前端日期选择函数

function  pick(v)  {
        

window.opener.document.<%=request.querystring("form")%>.<%=request.qu

erystring("field")%>.value=v;
        window.close();
        return  false;
}
</Script>
<style>
<!--
.page                {  text-decoration:  none;  color:  #CAE3FF;  font-size:9pt;  

font-family:Webdings  }
.dayTable        {  border:  1px  dotted  #E6E6E6;  padding-left:  4;  

padding-right:  4;  padding-top:  1;  padding-bottom:  1}
.day                  {  font-family:  Arial;  font-size:  9pt;  text-decoration:  

underline;  color:  #000000  }
:hover.day      {  font-family:  Arial;  font-size:  9pt;  text-decoration:  

none;  color:  #FF0000  }
.title              {  font-family:  Arial;  font-size:  9pt;  color:  #FFFFFF;  

font-weight:  bold  }
:hover.page    {  text-decoration:  underline;  color:  #FFFFFF;  

font-family:Webdings;  font-size:9pt  }
-->
</style>
</head>
<body  topmargin="0"  leftmargin="0"  onLoad="window.focus();">
<div  align="center">
    <center>
    <table  border="0"  cellspacing="0"  style="border-collapse:  collapse"  

width="100%"  id="AutoNumber1"  cellpadding="0">
        <tr>
            <td  width="100%"  bgcolor="#003063">
            <%
            ''日历表头显示
            %>
            <div  align="center">
                <center>
                <table  border="0"  cellspacing="0"  style="border-collapse:  

collapse"  width="100%"  id="AutoNumber3"  cellpadding="2">
                    <tr>
                        <td  width="20%"  align="center">
                        <a  

href="calendar.asp?year=<%=Previous_year%>&month=<%=Month_var%>&form=

<%=request.querystring("form")%>&field=<%=request.querystring("field"

)%>"  title="Previous  Year"  class="page">7</a>
                          <a  

href="calendar.asp?year=<%=Year_var%>&month=<%=Previous_month%>&form=

<%=request.querystring("form")%>&field=<%=request.querystring("field"

)%>"  title="Previous  Month"  class="page">3</a></td>
                        <td  width="60%"  align="center"  

class="title"><%response.write  Month_Name(Month_var)  &  " "  &  

Year_var%></td>
                        <td  width="20%"  align="center">
                        <a  

href="calendar.asp?year=<%=Year_var%>&month=<%=Next_month%>&form=<%=r

equest.querystring("form")%>&field=<%=request.querystring("field")%>"  

title="Next  Month"  class="page">4</a>
                          <a  

href="calendar.asp?year=<%=Next_year%>&month=<%=Month_var%>&form=<%=r

equest.querystring("form")%>&field=<%=request.querystring("field")%>"  

title="Next  Year"  class="page">8</a></td>
                    </tr>
                </table>
                </center>
            </div>
            </td>
        </tr>
        <tr>
            <td  width="100%">
            <div  align="center">
                <center>
                <table  border="0"  cellspacing="0"  style="border-collapse:  

collapse"  width="100%"  id="AutoNumber2"  cellpadding="3">
                    <tr>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Mon</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Tur</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Wed</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Thu</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Fri</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Sat</td>
                        <td  align="center"  bgcolor="#31659C"  

class="title">Sun</td>
                    </tr>
                    <%
                    ''日历内容  5行*7例  显示
                    ''外层循环显示控制行
                    
                    for  i=0  to  4
                    %>
                    <tr>
                    <%
                    ''内层循环显示控制列
                    
                            for  j=0  to  6
                                    response.write  "<td  align=''center''  

class=''dayTable''"
                                    
                                    ''天数显示,“今天”显示
                                    
                                    if  Current_day  =  date  then
                                            response.write  "  bgcolor=''#FFFFE0''>"
                                            %><a  

href="javascript:pick(''<%=Current_day%>'');"  title="Today"  

class="day"><b><%=day(Current_day)%></b></a><%                                    
                                    else
                                    
                                            ''天数显示,非本月天数显示
                                    
                                            if  Month(Current_day)  <>  Month_var  

then
                                                    response.write  "  

bgcolor=''#F0F0F0''>"
                                                    %>
                                                    <a  

href="javascript:pick(''<%=Current_day%>'');"  title="<%=Current_day%>"  

class="day"><font  color="#CCCCCC"><%=day(Current_day)%></font></a><%
                                            else
                                                    
                                                    ''天数显示,本月天数显示
                                                    response.write  ">"
                                                    %>
                                                    <a  

href="javascript:pick(''<%=Current_day%>'');"  title="<%=Current_day%>"  

class="day"><%=day(Current_day)%></a><%
                                            end  if
                                        
                                    end  if
                                    
                                    ''天数累加推算
                                    
                                    Current_day  =  Current_day  +  1
                                response.write  "</td>"
                            next
                    %>
                    </tr>
                    <%
                    next
                    %>
                </table>
                </center>
            </div>
            </td>
        </tr>
    </table>
    </center>
</div>
</body>
</html>
===========================================================
[后记]
  其实这个日期选择器通用性很大,稍加改动还可以在其它应用中发挥更多效力。比如,在开发日程安排的程序时,将其放在内嵌框架里,让用户在同一页面不刷新的情况下方便选择,安排事务更是方便有效。

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i73.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>