?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}";
}
}
!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>