PHP学习实例—5(日历类的编写)

  用PHP实现日历类的编写

calendar.class.php

<?php
/*
*  创建一个日历类
*
*
*/
	//修改默认时区
  date_default_timezone_set("PRC");
  
	class Calendar {
	  private $year;
		private $month;
		private $day; //当月总天数
		private $first_week; //每月的第一天是星期几
		
		//构造函数
		function __construct() {
		  $this->year = isset($_GET['year'])?$_GET['year']:date("Y");
			$this->month = isset($_GET["month"])?$_GET["month"]:date("m");
		  $this->first_week = date("w", mktime(0, 0 ,0, $this->month, 1, $this->year));
			$this->day = date("t", mktime(0, 0 ,0, $this->month, 1, $this->year));
		}
		function showCalendar() {
	//	  echo $this->year."年".$this->month."月".$this->first_week."天".$this->day;
	    echo "<table align='center'>"; //用表格输出
			  $this->chageDate("index.php");	//用于用户调整年月份
				$this->weekList();//显示星期
				$this->dayList();	//显示天数
				
			echo "</table>";
		}
		//1、显示星期
		private function weekList() {
		  $week = array("日","一","二","三","四","五","六");
			echo "<tr>";
			  for ($i = 0; $i < count($week); $i++) {
					echo "<th>".$week[$i]."</th>";
				}
			echo "</tr>";
		}
		//2.显示天数
		private function dayList() {
			$color = "#2ca50c";
			echo "<tr>";
				for ($i = 0; $i < $this->first_week; $i++) { //输出空格,弥补当前月空缺部分
				  echo "<td bgcolor='#2ca50c'> </td>";
				}
				for ($k = 1; $i <= $this->day; $k++) {
				  $i++;
					if ($k == date("d"))  echo "<td id='nowd'>".$k."</td>"; //是今天,加效果
				  else echo "<td bgcolor=$color>".$k."</td>";
					if ($i % 7 == 0) {
						echo "</tr><tr>"; //每7天一次换行
						if ($i % 2 == 0) $color = "#2ca50c";
						else $color = "#9ddb27"; //实现各行换色的效果
					}
				}
			while ($i % 7 != 0) { //将剩余的空格补完
			  echo "<td bgcolor='#2ca50c'> </td>";
				$i++; 
			}
			echo "</tr>";
		}
		 
		//3、用于用户调整天数
		private function chageDate($url="index.php") {
			echo "<tr>";
			  echo "<caption><h1>".$this->year."年".$this->month."月</h1></caption>";	
			echo "</tr>";
			echo "<tr>";
				echo "<td>"."<a href='?".$this->prevYear($this->year,$this->month)."'>"."<"."</a>";
				echo "<td>"."<a href='?".$this->prevMonth($this->year,$this->month)."'>"."<<"."</a>";
				
				echo "<td colspan='3'>";
				  echo '<select οnchange="window.location=\''.$url.'?year=\'+this.options[selectedIndex].value+\'&month='.$this->month.'\'">';
					  for ($year = 2038; $year >= 1970; $year--) {
						  $selected = ($year == $this->year)?"selected":"";
							echo '<option '.$selected. ' value="'.$year.'">'.$year.'</option>';
							//echo '<option '.$selected.' value="'.$year.'">'.$year.'</option>';
						}
					echo "</select>";
						
			echo '<select name="month" οnchange="window.location=\''.$url.'?year='.$this->year.'&month=\'+this.options[selectedIndex].value">';
				for($month=1;$month <= 12;$month++){
				  $selected1 = ($month == $this->month) ? "selected" : "";
					echo '<option '.$selected1.' value="'.$month.'">'.$month.'</option>';
				}
			echo '</select>';
			echo "</td>";
				
				
				echo "<td>"."<a href='?".$this->nextMonth($this->year,$this->month)."'>".">>"."</a>";
				echo "<td>"."<a href='?".$this->nextYear($this->year,$this->month)."'>".">"."</a>";
			echo "</tr>";
		}
		
		private function prevYear($year, $month) { //获取上一年的数据
			$year--;
			if ($year < 1970) $year = 1970;
			return "year={$year}&month={$month}";
		}
		private function prevMonth($year, $month) {
		  if ($month == 1) {
			  $year--;
				if ($year < 1970) $year = 1970;
				$month = 12;
			}else $month--;	
			return "year={$year}&month={$month}";
		}
		private function nextYear($year, $month) { //获取上一年的数据
			$year++;
			if ($year > 2038) $year = 2038;
			return "year={$year}&month={$month}";
		}
		private function nextMonth($year, $month) {
		  if ($month == 12) {
			  $year++;
				if ($year > 2038) $year = 2038;
				$month = 1;
			}else $month++;	
			return "year={$year}&month={$month}";
		}
	}
	
主页 index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>日历显示</title>
<style>
  table {
		border:1px solid #050;
		margin: 100px auto;
	}
	th {
	  width: 30px;
		background-color: #0CC;
		color: #fff;
		height: 30px;
		font-size: 20px;
	}
	#nowd {
	  color: yellow;
		background: #F00;
	}
	td {
	  width: 30px;
		text-align: center;
	
		height: 25px;
		color: #fff;
	}
	a {
		display: block;
		width: 35px;
		height: 35px;
		background: #0F9;
	  text-decoration: none;
		text-align: center;
		line-height: 35px;
	}
	a:hover {
	  background: #CF0;
		color: #fff;
		font-size: 20px;
	}
</style>
</head>

<body>
  <?php
  include "calendar.class.php";
	$ca = new Calendar();
	$ca->showCalendar();
	?>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值