PHP制作年日历

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>年日历</title>
    <style>
        #container{
            display: flex;
            justify-content: space-around;
            flex-wrap: wrap;
            border: 1px solid deepskyblue;
            overflow: hidden;
            padding-bottom: 20px;
        }
        table{
            width: 15%;
            padding-bottom: 20px;
            margin-top: 20px;
        }
        th{
            background-color: gray;
            padding-bottom: 20px;
        }
        td{
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="container">
        <?php
            //处理一个第一天是周几
            function whatWeek($d,$firstWeek,&$html){
                if ($d == 1){
                    for ($i = 0 ;$i < $firstWeek;$i++){
                        $html .= '<td> </td>';
                    }
                }
            }
            //判断闰年
            function isLeapYear($y){
                return $y % 400 == 0 || ($y % 4 == 0 && $y % 100 != 0);
            }
            //输出日期
            function printDate($sumDay,&$html,$firstWeek,&$lastWeek){
                for ($d = 1 ; $d <= 6 ;$d++){
                    $html .= '<tr>';
                    whatWeek($d,$firstWeek,$html);
                    for ($day = ($d == 1 ? ($d-1)*7+1 : ($d-2)*7+1+6-$firstWeek+1) ;$day <= ($d-1)*7+1+6-$firstWeek;$day++){
                        $html .= "<td>$day</td>";
                        if ($day == $sumDay){
                            $lastWeek = ($day+$firstWeek) % 7;
                            break 2;
                        }
                    }
                    $html .= '</tr>';
                }
            }
            //生成日历
            function calendar($y){
                $firstWeek = date('N',mktime(0,0,0,1,1,$y));//当月第一天是周几
                $lastWeek = 0;//当月最后一天是周几
                $html = '';//日历页面
                for ($m = 1 ; $m <= 12 ;$m++){
                    $html .= '<table border="1">';
                    $html .= '<tr><th colspan="7">'.$y.'年'.$m.'月'.'</th></tr>';
                    $html .= '<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>';
                    if ($m == 1||$m==3||$m==5||$m==7||$m==8||$m==10||$m==12){
                        $sumDay = 31;//大月31天
                        printDate($sumDay,$html,$firstWeek,$lastWeek);
                    }else if($m == 2){
                        $sumDay = isLeapYear($y) ? 29 : 28; //闰年29天,平年28天
                        printDate($sumDay,$html,$firstWeek,$lastWeek);
                    }else{
                        $sumDay = 30;//小月30天
                        printDate($sumDay,$html,$firstWeek,$lastWeek);
                    }
                    $html .= '</table>';
                    $firstWeek = $lastWeek;
                }
                return $html;
            }
            echo calendar(date('Y',time()));
        ?>
    </div>
</body>
</html>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值