[转][PHP] [06-12] 用PHP制作简单的日历

经常上网浏览网页的朋友在别人的网页上可能看见过一个漂亮的日历在显示着年、月、日,很是可爱。就是这么一个小小的日历却今别人的网页精彩动人,变得不在单调。这时我们不仅要想能不能在我们自己的网页上也放上一个,这个小程序是如何制作的。其实制作它并不是很难,当然制作这个日历的方法有很多,但我们这里讲得是PHP所以,在这里就用PHP来制作它。
  为了让大家比较容易理解制作,在这里先制作一个简单的日历。

  这个日历程序大量使用了PHP的日期时间函数和判断比较语句,通过制作这个小程序能使我们对日期时间函数有一个大概的了解。

  为了程序结构简单和功能块的独立,我把一个可以用一个大的文件就可以制作完成的程序分成了三个独立的小文件,这样每个小文件的功能是比较明了和集中的,这使我们理解起来比较容易。这三个文件分别是index.php页面布局文件、gouzao.php构造日历文件、gouzaoconfig.php配置日历文件。另外还有一个CSS层叠式样式表文件。

  下面先看index.php文件:

<html>
<head>
<title>简单日历</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="StyleDefault.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style1 {
  font-family: 宋体;
  font-size: 12px;
  color: #FF0000;
}
.style2 {
  color: #0000FF;
  font-weight: bold;
}
td {
  font-family: "宋体";
  font-size: 12pt;
  text-decoration: none;
}
-->
</style>
</head>
<body>
<?php
  require ("gouzao.php");
?>
<?php
$yb=$year;
$yf=$year;
$mb=$month-1;
if ($mb<1) {$mb=12; $yb=$year-1;}
$mf=$month+1;
if ($mf>12) {$mf=1; $yf=$year+1;}
?>
<table width="175" border="0" cellspacing="0" cellpadding="0" align="center">
 <tr>
  <td>
   <a href="<?php echo "index.php?month=$mb&year=$yb" ?>">向后</a></td>
  <td align="center">
   <a href="<?php echo "index.php" ?>">今天</a></td>
  <td align="right">
   <a href="<?php echo "index.php?month=$mf&year=$yf" ?>">向前</a></td>
 </tr>
</table>

</body>
</html>

  通过上面的代码可以看出,index.php文件主要包括StyleDefault.css样式表文件、gouzao.php构造日历文件。这个文件的功能是把所有的文件或直接的或间接的组织在一起,然后按我们所设想的布局呈现在页面上。简单的说,就是这个文件起到一个布局的作用。

gouzao.php

<?php
require ("gouzaoConfig.php");
if (!isset($month)) $month=$_REQUEST["month"];
if (!isset($year)) $year=$_REQUEST["year"];
$today=intval(date("d",time()));//intval函数输出变量的整数值
if (!$month) $month=date("m",time());//$month数字表示的月份
if (!$year) $year=date("Y",time());//$year四位数字表示的年份
$day_count=1;
$month=intval($month);//获取$month变量的整数值
$mn=$mth[$month];//在gouzaoConfig.php中$mth是数组,通过$mth数组获得大写月份
$mn=$year."年 ".$mn;//输出日历的年月
$sd=date ("w",mktime(0,0,0,$month,0,$year));//星期中的第几天,数字表示,0表示星期天
$cd=1-$sd;
$nd=mktime (0,0,0,$month+1,0,$year);
$nd=(strftime ("%d",$nd))+1;
echo "<table class=mainTable WIDTH=$tableWidth CELLSPACING=$cellSpacing CELLPADDING=$cellPadding
    BORDER=0>\n";
echo " <tr>\n";
echo " <td CLASS=\"monthYearText monthYearRow\" colspan=\"7\" title=\"Easily Simple Calendar 4.8\">\n     $mn\n </td>\n";
echo " </tr>\n";/**/
echo " <tr CLASS=dayNamesText>\n";
for ($I=1;$I<=7;$I++)
{
  $dayprint=$I;
  if ($dayprint==7) $dayprint=$dayprint-7;
  echo" <td class=dayNamesRow WIDTH=$cellWidth>$day[$dayprint]</td>\n";
}
echo " </tr>\n";/**/
for ($i=1;$i<7;$i++)//这里决定日历的行数
{
  echo " <tr class=rows>\n";
  for ($prow=1;$prow<8;$prow++)//这里决定日历的列数
  {
    if ($day_count==$today && $highlightToday==1 && $cd>0 && $cd<$nd)
    {
      echo " <td class=\"s2$bgc[$day_count] today\"";

      echo ">$cd</td>\n";
      $day_count++;
      $cd++;
    }
    else
    {
      if ($cd>0 && $cd<$nd)
      {
        echo " <td class=s2$bgc[$day_count]";
        echo ">$cd</td>\n";
        $day_count++;
      }
      else
      {
        echo " <td class=s20> </td>\n";
      }
      $cd++;
    }
  }
  echo "</tr>\n";
}
echo "</table>\n";
?>

  这段代码主要利用了两个for循环语句来输出日历的正确天数。

gouzaoconfig.php

<?php

//日历表格的宽度
$tableWidth=400;
$cellSpacing=1;
$cellPadding=0;

//将星期存入数组
$day[0]="星期日";
$day[1]="星期一";
$day[2]="星期二";
$day[3]="星期三";
$day[4]="星期四";
$day[5]="星期五";
$day[6]="星期六";

//将月份存入数组
$mth[1]="一月";
$mth[2]="二月";
$mth[3]="三月";
$mth[4]="四月";
$mth[5]="五月";
$mth[6]="六月";
$mth[7]="七月";
$mth[8]="八月";
$mth[9]="九月";
$mth[10]="十月";
$mth[11]="十一月";
$mth[12]="十二月";
?>

styledefault.css

.mainTable {
  background-color: #FFFFFF;
  border: 1px solid #003366;
 }

//月份和年表格行设置
.monthYearRow {
  line-height: 17pt;
  background-color: #FFFFFF;
  text-align: center;
  vertical-align: middle;
  background-image: url(monthBg.gif);
 }
月份和年文本设置
.monthYearText {
  font-family: 宋体;
  font-size: 20px;
  font-weight: Bold;
  color: #252216;
 }

.dayNamesRow {
  line-height: 13pt;
  background-color: #F5F4D3;
  text-align: center;
  vertical-align: middle;
 }

.dayNamesText {
  font-family: 宋体;
  font-size: 16px;
  font-weight: Bold;
  color: #433D27;
  background-image: url(dayBg.gif);
 }

.rows {
  font-family: 宋体;
  font-size: 12px;
  color: #433D27;
  line-height: 25pt;
  text-align: center;
  vertical-align: middle;
 }

///今天日期颜色
.today {
  color: #CF0000;
  font-weight: Bold;
  font-size: 16px;
 }

/有日期的单元格背景
.s2 {
  background-image: url("cdef.gif");
  background-color: #EEEEEE;
 }
没有日期的单元格背景
.s20 {
  background-image: url("cdef5.gif");
  background-color: #EBEBEB;
 }

 

到这里一个完整的小日历程序已经全部制作完成。这个小程序的运行环境需要PHP4.1.0版本或者更高版。这四个文件需要放在同一个文件目录中。

  这只是一个简单的日历程序,更复杂的的日历程序我们可以利用数据库或者文件来存储相应的数据。这样就可以通过操作数据库或者文件对日历进行高级的编辑。

本文来自: 171站长论坛(http://www.171zz.com/) 详细文章参考:http://www.171zz.com/thread-56358-1-1.html

转载于:https://www.cnblogs.com/laipDIDI/articles/2172576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值