7.6使用PHP制作万年历
7.6 使用PHP制作万年历
使用PHP生成万年历,主要使用了date()和mktime()函数,通过万年历的代码,可以详细了解这两个函数的使用方法。
本节的代码中主要用了如下3个函数来实现万年历。
·date()函数,用于格式化时间和取得当前时间信息。
·mktime()函数用于取得请求的时间段的时间戳。
·checkdate()函数,用于检查参数运算的年、月、日是否合法。
代码7-6万 年历7-6.php
01 <html>
02 <head>
03 <title>
万年月历</title>
04 <meta http-equiv="Content-Type" content="text/html; charset=gb_2312">
05 <!-- Style -->
06 <style type=text/css >
07 <!--
08 table{
09 background-color: #B0C4DE;
10 }
11 tr{
12 background-color: White;
13 }
14 td{
15 font-size: 20pt;
16 font-family :
宋体;
17 color: #708090;
18 line-height: 140%;
19 }
20 -->
21 </style>
22 </head>
23 <body>
24 <?php
25 //
检测用户是否提交数据
26 if(isset($_POST["year"])){
27 //
使用用户提交的数据作为年数据
28 $year = $_POST["year"];
29 }else{
30 //
使用当前日期的年作为年数据
31 $year = date("Y");
32 }
33 if(isset($_POST["month"])){
34 $month = $_POST["month"];
35 }else{
36 $month = date("m");
37 }
38 $date=01; //
初始化月数据
39 $day=01; //
初始化日数据
40 $off=0;
41 //
检测年数据是否正确
42 if($year<0 or $year > 9999){
43 //
如果年数据不正确,显示错误信息,关返回上一页。
44 echo "<script> alert("
年份应在1
至9999
之间.");history.go(-1); </script>";
45 exit();
46 }
47 if($month<0 or $month > 12){
48 //
如果月数据不正确,显示错误信息,关返回上一页。
49 echo "<script> alert("
月份应在1
至12
月之间.");history.go(-1); </script> ";
50 exit();
51 }
52 while(checkdate($month,$date,$year)){
53 $date++;
54 }
55 //
绘制万年历表头
56 ?>
57 <form method=post action="" name=calendar>
58 <table width=100% border=1 cellspacing=0 cellpadding=2 bordercolorlight=#333333
59 bordercolordark=#FFFFFF bgcolor=#CCCCFF>
60 <tr align=center valign=middle>
61 <td colspan=7 bgcolor=#efefef>
62 <input type="text" name="year" size="4" maxlength="4" value=<?=$year?> >
63 <input type="text" name="month" size="2" maxlength="2" value=<?=$month?> >
64 <input type="submit" name="submit" align=absmiddle border=0 value="
跳转">
65 </td>
66 </tr>
67 <tr align=center valign=middle>
68 <td bgcolor=#efefef>
日</td>
69 <td>
一</td>
70 <td>
二</td>
71 <td>
三</td>
72 <td>
四</td>
73 <td>
五</td>
74 <td bgcolor=#efefef>
六</td>
75 </tr>
76 <tr>
77 <?php
78 //
构建万年历内容
79 while ($day<$date){
80 //
设置日期颜色,如果是当前日期,使用红色进行标识
81 if($day == date("d") && $year == date("Y") && $month == date("m")){
82 $day_color = "red";
83 }else{
84 $day_color = "black";
85 }
86 //
设置星期天数据
87 if ($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Sunday"){
88 echo "<td><font color=$day_color>$day</font></td>";
89 $off = "01";
90 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Monday"){
91 //
设置星期一的数据
92 echo "<td> </td><td><font color=$day_color>$day</font></td>";
93 $off= "02";
94 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Tuesday"){
95 //
设置星期二的数据
96 echo "<td> </td><td> </td><td><font color=$day_color>$day</ font></td>";
97 $off= "03";
98 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Wednesday"){
99 //
设置星期三的数据
100 echo "<td> </td><td> </td><td> </td><td><font
101 color=$day_color>$day</font></td>";
102 $off= "04";
103 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Thursday"){
104 //
设置星期四的数据
105 echo "<td> </td><td> </td><td> </td><td> </td> <td><font
106 color=$day_color>$day</font></td>";
107 $off= "05";
108 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Friday") {
109 //
设置星期五的数据
110 echo
111 "<td> </td><td> </td><td> </td><td> </td><td> </td><td><font
112 color=$day_color>$day</font></td>";
113 $off= "06";
114 }elseif($day == "01" and date( "l", mktime(0,0,0,$month,$day,$year)) == "Saturday") {
115 //
设置星期六的数据
116 echo
117 "<td> </td><td> </td><td> </td><td> </td><td> </td><td> </td> <td><font 118 color=$day_color>$day</font></td>";
119 $off= "07";
120 }else{
121 //
直接显示日期
122 echo "<td><font color=$day_color>$day</font></td> \n";
123 }
124 //
递增while
循环条件
125 $day++;
126 //
设置开关变量
127 $off++;
128 //
当$off
大于7
时,重起一行,并把$off
变量置为1
129 if ($off>7) {
130 echo "</tr><tr>";
131 $off= "01";
132 }else{
133 echo "";
134 }
135 }
136 //
计算剩下的数据,使用空表格填充
137 for($i=$off ; $i<=7 ; $i++){
138 echo "<td> </td>";
139 }
140 ?>
141 </tr>
142 </table>
143 </form>
144 </body>
145 </html>
【代码解析】代码通过3个日期函数实现了万年历的绘制,从代码中看并没有什么复杂的函数应用。其过程主要是通过while循环,显示指定年月的天数,并使用if语句处理日期前的空间,把其转化为表格。代码的运行效果如图7-6所示。

图7-6 万年历
上一篇:7.5检查日期的有效性
下一篇:7.7小结
