天天看點

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