文章教程

7.6使用PHP制作万年历

9/17/2020 9:31:19 PM 人评论 次浏览

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>&nbsp</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>&nbsp</td><td>&nbsp</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>&nbsp</td><td>&nbsp</td><td>&nbsp</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>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</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>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</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>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</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>&nbsp</td>";
     139 }
     140 ?>
     141      </tr>
     142      </table>
     143 </form>
     144 </body>
     145 </html>

【代码解析】代码通过3个日期函数实现了万年历的绘制,从代码中看并没有什么复杂的函数应用。其过程主要是通过while循环,显示指定年月的天数,并使用if语句处理日期前的空间,把其转化为表格。代码的运行效果如图7-6所示。

图7-6 万年历

教程类别