效果图
逻辑
<?php
header("Content-type:text/html;charset=utf-8"); // 设置页面编码为utf-8
date_default_timezone_set("Asia/Shanghai"); // 设置日期时区为中国时区
$today = time(); // 获取当前日期时间戳
$year = @$_GET["year"]; // 获取用户提交的年份信息
$month = @$_GET["month"]; // 获取用户提交的月份信息
if ($year == '') { // 获取当前日期的年份
$year = date("Y", $today);
}
if ($month == '') { // 获取当前日期的月份
$month = date("m", $today);
}
if ((int)$month == 0) { // 把日期转换为整型
$year -= 1;
$month = 12;
}
$time = mktime(0, 0, 0, $month, 1, $year); // 格式化当前日期
$year = date('Y', $time); // 格式化年份
$month = date('m', $time); // 格式化月份
$days = date('t', $time); // 当前月份一共有几天
$fstdw = date('N', $time); // 当前月份第一天为星期几
/*
* 万年历 表头+星期标签
* **/
echo "<table border=1 width=260 cellspacing=0 cellpadding=0 align=center
bgcolor=#cccccc>"; // 大表格
echo "<tr><td colspan=7 class=title>"; // 第一行表格
$str = "<a href=?year=" . ($year - 1) . "&month=" . $month . ">";
$str .= "«</a>" . $year . "年"; // 输出年份
$str .= "<a href=?year=" . ($year + 1) . "&month=" . $month . ">";
$str .= "»</a> ";
$str .= "<a href=?year=" . $year . "&month=" . ($month - 1) . ">";
$str .= "«</a> " . $month . "月 "; // 输出月份
$str .= "<a href=?year=" . $year . "&month=" . ($month + 1) . ">";
$str .= "»</a>";
echo $str;
echo "</td></tr>";
echo "<tr>"; // 换行
$str = "<td>一</td>"; // 当前及以下输出星期
$str .= "<td>二</td>";
$str .= "<td>三</td>";
$str .= "<td>四</td>";
$str .= "<td>五</td>";
$str .= "<td>六</td>";
$str .= "<td>七</td>";
echo $str; // 输出子表格
echo "</td>"; // 输出表格外框
/*
* 万年历 月份
* **/
$rows = ceil(($days + $fstdw - 1) / 7); // 要输出的行数 ceil()四舍五入
$cd = 1; // 第一天值为1
for ($i = 0; $i < $rows; $i++) { // 外层循环行
echo "<tr>"; // 打印输出行
for ($j = 0; $j < 7; $j++) { // 内层循环单元格
echo "<td>"; // 打印输出单元格
if ($cd >= $fstdw && $cd < $days + $fstdw) {
$oday = $cd - $fstdw + 1; // 计算出最终天数
if ($oday == date('d', time())) { // 若循环到当前日期
echo "<font-face color='red'><b><u>"; // 日期加粗、变色显示
}
echo $oday; // 在单元格内显示天数
} else {
echo ".";
}
$cd++; // 天数每次循环增加1
echo "</td>";
}
echo "</tr>";
}
echo "</table>"; // 输出表格
···