天天看点

php 生成万年历效果图逻辑

效果图

php 生成万年历效果图逻辑

逻辑

<?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>";                                    // 输出表格
···