在Web开发中我们经常会需要开发一些和日历相关的应用,自然需要制作一些日历程序,一些大家伙比如C#,JAVA或是VB.NET这些语言以往都有不少文章和示例介绍了,所以今天我给大家说一下其他常见Web脚步语言中的日历算法逻辑和具体的实现方式,希望对大家有用。

先看看我们的实现目标,就是在网页中通过脚本语言实现如下的日历:

 【转】各种Web脚本下,日历的实现方法。

要实现日历就必须用到相关语言中的日期和时间函数,其中最重要的是具有下面功能的两个函数:

  • 能返回指定日期是星期几的函数
  • 能返回指定年份和月份一共有多少天的函数,或者可以返回指定两个日期之间相差多少天的函数

只要语言中具有上面两个功能的函数就可以轻松实现日历。

实现日历的算法逻辑大致如下:

  1. 取得当前要显示的月份的1号是在星期几
  2. 取得当前要显示的月份一共有多少天
  3. 通过HTML的方式生成一个HTML的表格来显示日历(每行显示一周,并根据需要来决定是生成5行还是6行的表格)
  4. 根据显示的月份1号所在星期几空出前面的不属于该月日期的表格单元格
  5. 根据显示的月份1号所在星期几来决定生成表格时从星期几开始生成日历显示(第一天在星期几)
  6. 根据一共有多少天来顺次生成指定天数,另外每生成七个单元格需要加入一个表格的换行
  7. 补足HTML表格空缺的单元格

剩下的就是根据不同语言中具体的函数来实现了:

下面是根据上述算法和逻辑在asp中的具体实现代码:

 1【转】各种Web脚本下,日历的实现方法。<style>
 2【转】各种Web脚本下,日历的实现方法。td { font-family: "宋体"; font-size:9pt}
 3【转】各种Web脚本下,日历的实现方法。</style>
 4【转】各种Web脚本下,日历的实现方法。<body bgcolor="eeeeee">
 5【转】各种Web脚本下,日历的实现方法。<table width="180" cellpadding="0" cellspacing="1" bgcolor="dddddd" align=center>
 6【转】各种Web脚本下,日历的实现方法。<%
 7【转】各种Web脚本下,日历的实现方法。'以下为ASP中通过该日历算法实现的具体代码
 8【转】各种Web脚本下,日历的实现方法。
 9【转】各种Web脚本下,日历的实现方法。    '先判断是否指定了一个年份和月份,没有则根据当前的年和月份显示
10【转】各种Web脚本下,日历的实现方法。    If Request("ReqDate")="" then
11【转】各种Web脚本下,日历的实现方法。         CurrentDate=Date
12【转】各种Web脚本下,日历的实现方法。    else
13【转】各种Web脚本下,日历的实现方法。         CurrentDate=Trim(Request("ReqDate"))
14【转】各种Web脚本下,日历的实现方法。    end if 
15【转】各种Web脚本下,日历的实现方法。    pyear=year(CurrentDate)
16【转】各种Web脚本下,日历的实现方法。    pmonth=month(CurrentDate)
17【转】各种Web脚本下,日历的实现方法。
18【转】各种Web脚本下,日历的实现方法。    '以下的代码生成日历显示的表格头内容
19【转】各种Web脚本下,日历的实现方法。%>
20【转】各种Web脚本下,日历的实现方法。  <tr align="LEFT" bgcolor="#dddddd"> 
21【转】各种Web脚本下,日历的实现方法。    <td width="14%" height="19" align="center">
22【转】各种Web脚本下,日历的实现方法。        <input type="button" value="<<" onclick="javascript:location.href='?ReqDate=<%=DateAdd("m",-1,CurrentDate) %>'">
23【转】各种Web脚本下,日历的实现方法。    </td>
24【转】各种Web脚本下,日历的实现方法。    <td colspan="5" align="center">
25【转】各种Web脚本下,日历的实现方法。        <%=pyear%><%=pmonth%>
26【转】各种Web脚本下,日历的实现方法。    </td>
27【转】各种Web脚本下,日历的实现方法。    <td width="14%" align="center">
28【转】各种Web脚本下,日历的实现方法。        <input type="button" value=">>" onclick="javascript:location.href='?ReqDate=<%=DateAdd("m",1,CurrentDate)%>'">
29【转】各种Web脚本下,日历的实现方法。    </td>
30【转】各种Web脚本下,日历的实现方法。  </tr>
31【转】各种Web脚本下,日历的实现方法。  <tr align="center" bgcolor="#CCCCCC"> 
32【转】各种Web脚本下,日历的实现方法。    <td width="14%" height="19"> 日</td>
33【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 一</td>
34【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 二</td>
35【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 三</td>
36【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 四</td>
37【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 五</td>
38【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 六</td>
39【转】各种Web脚本下,日历的实现方法。  </tr>
40【转】各种Web脚本下,日历的实现方法。  <tr align=center bgcolor=ffffff height=19>
41【转】各种Web脚本下,日历的实现方法。  <%
42【转】各种Web脚本下,日历的实现方法。  '由于ASP中没有获取指定月共有多少天的函数,因此我们需要通过其他算法来获得,算法其实很简单,就是计算一下要显示月份的1日至下个月的1日一共相差几天
43【转】各种Web脚本下,日历的实现方法。    fromDate = FormatDateTime(month(CurrentDate) & "/1/" &  year(CurrentDate)) 
44【转】各种Web脚本下,日历的实现方法。    toDate = FormatDateTime(DateAdd("m",1,fromDate)) 
45【转】各种Web脚本下,日历的实现方法。    '获得要显示月份的第一天为周几
46【转】各种Web脚本下,日历的实现方法。    nunmonthstart=weekday(fromDate)-1
47【转】各种Web脚本下,日历的实现方法。    '获得要显示的1日至下个月的1日一共相差几天(月份一共有多少天)
48【转】各种Web脚本下,日历的实现方法。    nunmonthend=DateDiff("d",fromDate,toDate)
49【转】各种Web脚本下,日历的实现方法。    '判断显示日历需要用几行表格来显示(每行显示7天)
50【转】各种Web脚本下,日历的实现方法。    if nunmonthstart+nunmonthend<36 then
51【转】各种Web脚本下,日历的实现方法。         maxi=36
52【转】各种Web脚本下,日历的实现方法。    else
53【转】各种Web脚本下,日历的实现方法。         maxi=43
54【转】各种Web脚本下,日历的实现方法。    end if
55【转】各种Web脚本下,日历的实现方法。    '循环生成表格并显示
56【转】各种Web脚本下,日历的实现方法。    i=1
57【转】各种Web脚本下,日历的实现方法。    do while i<maxi
58【转】各种Web脚本下,日历的实现方法。        iv=i-nunmonthstart
59【转】各种Web脚本下,日历的实现方法。        if i>nunmonthstart and i<=nunmonthend+nunmonthstart then
60【转】各种Web脚本下,日历的实现方法。            '如果为显示的是今天则用红色背景显示
61【转】各种Web脚本下,日历的实现方法。            if iv=Day(nowand month(now)=pmonth and year(now)=pyear then
62【转】各种Web脚本下,日历的实现方法。                response.write( "<td align=center bgcolor=ffaaaa><a href='#' target=_blank>" & iv & "</a></td>")
63【转】各种Web脚本下,日历的实现方法。            else
64【转】各种Web脚本下,日历的实现方法。                response.write( "<td align=center><a href='#' target=_blank>" & iv & "</a></td>")
65【转】各种Web脚本下,日历的实现方法。            end if
66【转】各种Web脚本下,日历的实现方法。        else
67【转】各种Web脚本下,日历的实现方法。            response.write( "<td> </td>")
68【转】各种Web脚本下,日历的实现方法。        end if
69【转】各种Web脚本下,日历的实现方法。
70【转】各种Web脚本下,日历的实现方法。        '如果能被7整除(每行显示7个)则输出一个换行
71【转】各种Web脚本下,日历的实现方法。        if i mod 7=0 then
72【转】各种Web脚本下,日历的实现方法。            response.write( "</tr><tr align=center bgcolor=ffffff height=19>")
73【转】各种Web脚本下,日历的实现方法。        end if
74【转】各种Web脚本下,日历的实现方法。        i=i+1
75【转】各种Web脚本下,日历的实现方法。    loop
76【转】各种Web脚本下,日历的实现方法。%>
77【转】各种Web脚本下,日历的实现方法。</table>
78【转】各种Web脚本下,日历的实现方法。</body>


具体实现效果如下:

【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在PHP中的具体实现代码:

 1【转】各种Web脚本下,日历的实现方法。<style>
 2>


具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在NoahWeb中的具体实现代码(一种面象动作驱动的语言):

 

 1>



具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

 1【转】各种Web脚本下,日历的实现方法。<style>
 2【转】各种Web脚本下,日历的实现方法。td { font-family: "宋体"; font-size:9pt}
 3【转】各种Web脚本下,日历的实现方法。</style>
 4【转】各种Web脚本下,日历的实现方法。<body bgcolor="eeeeee">
 5【转】各种Web脚本下,日历的实现方法。<table width="180" cellpadding="0" cellspacing="1" bgcolor="dddddd" align=center>
 6【转】各种Web脚本下,日历的实现方法。<%
 7【转】各种Web脚本下,日历的实现方法。'以下为ASP中通过该日历算法实现的具体代码
 8【转】各种Web脚本下,日历的实现方法。
 9【转】各种Web脚本下,日历的实现方法。    '先判断是否指定了一个年份和月份,没有则根据当前的年和月份显示
10【转】各种Web脚本下,日历的实现方法。    If Request("ReqDate")="" then
11【转】各种Web脚本下,日历的实现方法。         CurrentDate=Date
12【转】各种Web脚本下,日历的实现方法。    else
13【转】各种Web脚本下,日历的实现方法。         CurrentDate=Trim(Request("ReqDate"))
14【转】各种Web脚本下,日历的实现方法。    end if 
15【转】各种Web脚本下,日历的实现方法。    pyear=year(CurrentDate)
16【转】各种Web脚本下,日历的实现方法。    pmonth=month(CurrentDate)
17【转】各种Web脚本下,日历的实现方法。
18【转】各种Web脚本下,日历的实现方法。    '以下的代码生成日历显示的表格头内容
19【转】各种Web脚本下,日历的实现方法。%>
20【转】各种Web脚本下,日历的实现方法。  <tr align="LEFT" bgcolor="#dddddd"> 
21【转】各种Web脚本下,日历的实现方法。    <td width="14%" height="19" align="center">
22【转】各种Web脚本下,日历的实现方法。        <input type="button" value="<<" onclick="javascript:location.href='?ReqDate=<%=DateAdd("m",-1,CurrentDate) %>'">
23【转】各种Web脚本下,日历的实现方法。    </td>
24【转】各种Web脚本下,日历的实现方法。    <td colspan="5" align="center">
25【转】各种Web脚本下,日历的实现方法。        <%=pyear%><%=pmonth%>
26【转】各种Web脚本下,日历的实现方法。    </td>
27【转】各种Web脚本下,日历的实现方法。    <td width="14%" align="center">
28【转】各种Web脚本下,日历的实现方法。        <input type="button" value=">>" onclick="javascript:location.href='?ReqDate=<%=DateAdd("m",1,CurrentDate)%>'">
29【转】各种Web脚本下,日历的实现方法。    </td>
30【转】各种Web脚本下,日历的实现方法。  </tr>
31【转】各种Web脚本下,日历的实现方法。  <tr align="center" bgcolor="#CCCCCC"> 
32【转】各种Web脚本下,日历的实现方法。    <td width="14%" height="19"> 日</td>
33【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 一</td>
34【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 二</td>
35【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 三</td>
36【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 四</td>
37【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 五</td>
38【转】各种Web脚本下,日历的实现方法。    <td width="14%"> 六</td>
39【转】各种Web脚本下,日历的实现方法。  </tr>
40【转】各种Web脚本下,日历的实现方法。  <tr align=center bgcolor=ffffff height=19>
41【转】各种Web脚本下,日历的实现方法。  <%
42【转】各种Web脚本下,日历的实现方法。  '由于ASP中没有获取指定月共有多少天的函数,因此我们需要通过其他算法来获得,算法其实很简单,就是计算一下要显示月份的1日至下个月的1日一共相差几天
43【转】各种Web脚本下,日历的实现方法。    fromDate = FormatDateTime(month(CurrentDate) & "/1/" &  year(CurrentDate)) 
44【转】各种Web脚本下,日历的实现方法。    toDate = FormatDateTime(DateAdd("m",1,fromDate)) 
45【转】各种Web脚本下,日历的实现方法。    '获得要显示月份的第一天为周几
46【转】各种Web脚本下,日历的实现方法。    nunmonthstart=weekday(fromDate)-1
47【转】各种Web脚本下,日历的实现方法。    '获得要显示的1日至下个月的1日一共相差几天(月份一共有多少天)
48【转】各种Web脚本下,日历的实现方法。    nunmonthend=DateDiff("d",fromDate,toDate)
49【转】各种Web脚本下,日历的实现方法。    '判断显示日历需要用几行表格来显示(每行显示7天)
50【转】各种Web脚本下,日历的实现方法。    if nunmonthstart+nunmonthend<36 then
51【转】各种Web脚本下,日历的实现方法。         maxi=36
52【转】各种Web脚本下,日历的实现方法。    else
53【转】各种Web脚本下,日历的实现方法。         maxi=43
54【转】各种Web脚本下,日历的实现方法。    end if
55【转】各种Web脚本下,日历的实现方法。    '循环生成表格并显示
56【转】各种Web脚本下,日历的实现方法。    i=1
57【转】各种Web脚本下,日历的实现方法。    do while i<maxi
58【转】各种Web脚本下,日历的实现方法。        iv=i-nunmonthstart
59【转】各种Web脚本下,日历的实现方法。        if i>nunmonthstart and i<=nunmonthend+nunmonthstart then
60【转】各种Web脚本下,日历的实现方法。            '如果为显示的是今天则用红色背景显示
61【转】各种Web脚本下,日历的实现方法。            if iv=Day(nowand month(now)=pmonth and year(now)=pyear then
62【转】各种Web脚本下,日历的实现方法。                response.write( "<td align=center bgcolor=ffaaaa><a href='#' target=_blank>" & iv & "</a></td>")
63【转】各种Web脚本下,日历的实现方法。            else
64【转】各种Web脚本下,日历的实现方法。                response.write( "<td align=center><a href='#' target=_blank>" & iv & "</a></td>")
65【转】各种Web脚本下,日历的实现方法。            end if
66【转】各种Web脚本下,日历的实现方法。        else
67【转】各种Web脚本下,日历的实现方法。            response.write( "<td> </td>")
68【转】各种Web脚本下,日历的实现方法。        end if
69【转】各种Web脚本下,日历的实现方法。
70【转】各种Web脚本下,日历的实现方法。        '如果能被7整除(每行显示7个)则输出一个换行
71【转】各种Web脚本下,日历的实现方法。        if i mod 7=0 then
72【转】各种Web脚本下,日历的实现方法。            response.write( "</tr><tr align=center bgcolor=ffffff height=19>")
73【转】各种Web脚本下,日历的实现方法。        end if
74【转】各种Web脚本下,日历的实现方法。        i=i+1
75【转】各种Web脚本下,日历的实现方法。    loop
76【转】各种Web脚本下,日历的实现方法。%>
77【转】各种Web脚本下,日历的实现方法。</table>
78【转】各种Web脚本下,日历的实现方法。</body>


具体实现效果如下:

【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在PHP中的具体实现代码:


具体实现效果如下:

【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在PHP中的具体实现代码:

 1【转】各种Web脚本下,日历的实现方法。<style>
 2>


具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在NoahWeb中的具体实现代码(一种面象动作驱动的语言):

 

 1>



具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

 

 1【转】各种Web脚本下,日历的实现方法。<style>
 2>


具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

下面是根据上述算法和逻辑在NoahWeb中的具体实现代码(一种面象动作驱动的语言):

 

 1>



具体实现效果如下:
【转】各种Web脚本下,日历的实现方法。

源码下载:https://files.cnblogs.com/Aiasted/c.rar

相关文章:

  • 2022-12-23
  • 2021-08-08
  • 2021-09-07
  • 2021-12-26
  • 2021-09-25
  • 2022-12-23
猜你喜欢
  • 2021-09-08
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-13
  • 2022-01-01
相关资源
相似解决方案