zoukankan      html  css  js  c++  java
  • 【PHP】制作日历

    本期本博主将讲述两种利用PHP制作日历的方法,由于PHP日期函数的便捷性,使得我们制作日历这一过程变得相当简单

    问题描述:

    1、取到当前日期,并着色显示;
    2、根据当前日期,判断本月有多少天,一号是周几;
    3、完成本月日历显示

    方法一,自动取到当前日期,代码如下

    date_default_timezone_set("PRC");
        
        $time = getdate();
        $mday = $time["mday"];
        $mon = $time["mon"];
        $year = $time["year"];
        
        
        if($mon==4||$mon==6||$mon==9||$mon==11){
            $day = 30;
        }elseif($mon==2){
            if(($year%4==0&&$year%100!=0)||$year%400==0){
                $day = 29;
            }else{
                $day = 28;
            }
        }else{
            $day = 31;
        }
        
        $w = getdate(mktime(0,0,0,$mon,1,$year))["wday"];
        
        $date = function($day,$w){
            echo "<table border='1'>";
            echo "<tr><th>星期日</th><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th></tr>";
            $arr = array();
            for($i=1;$i<=$day;$i++){
                array_push($arr,$i);
            }
            if($w>=1&&$w<=6){
                for($m=1;$m<=$w;$m++){
                    array_unshift($arr,"");
                }
            }
            $n=0;
            for($j=1;$j<=count($arr);$j++){
                $n++;
                if($n==1) echo "<tr>";
                global $mday;
                if($mday==$arr[$j-1]){
                    echo "<td width='80px' style='background-color: greenyellow;'>".$arr[$j-1]."</td>";
                }else{
                    echo "<td width='80px'>".$arr[$j-1]."</td>";
                }
                
                if($n==7){
                    echo "</tr>";
                    $n=0;
                }
            }
            if($n!=7)echo "</tr>";
            
            echo "</table>";
        };
        $date($day,$w);

    运行结果如下

    方法二,指定当前日期,代码如下

    //此处为时间输入
     echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当前时间戳为:";    
     echo $today=mktime(9,34,56,06,02,2017);
     
     echo "</br>";
     echo "</br>";
     
     
     $r=date("L",$today);//润平年
     $w=date("N",$today);//星期
     $m=date("n",$today);//月份
     $d=date("j",$today);
    if($m==1||$m==3||$m==5||$m==7||$m==8||$m==10||$m==12){
        $days=31;
    }elseif($m==4||$m==6||$m==9||$m==11){
        $days=30;
    }elseif($m==2){
        if($r==1){
            $days=29;
        }else{
            $days=28;    
        }
    }else{
        echo "日期有误!!!";
    }
        
    $day=1;
    $week=0;
    $count=($days+$w)/7;
    
        echo "<table border='1' width='500'>";
            echo <<<th
            <tr style="background-color:#ccc;">
                <th style="color:red;">星期天</th>
                <th>星期一</th>
                <th>星期二</th>
                <th>星期三</th>
                <th>星期四</th>
                <th>星期五</th>
                <th style="color:green;">星期六</th>
            </tr>
    th;
        
        for($i=0;$i<=$count;$i++){
            echo "<tr>";
            for($j=0;$j<7;$j++){
                if(($week<$w)||($day>$days)){
                    echo "<td></td>";
                    $week++;
                }else{
                    if($day==$d){
                    echo "<td bgcolor='green';>{$day}</td>";
                    $day++;    
                    }else{
                    echo "<td>{$day}</td>";
                    $day++;
                    }
                }
                
            }
            if($day>$days){
                break;
            }
            echo "</tr>";
        }
        echo "</table>";
    
    echo "</br>";
    
    
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当前时间为:";
    echo date("Y-m-d H:i:s 星期N a",$today);

    运行结果如下图

    效果完美,而后在前两者的基础上稍加改进就可以得到万年历,PHP功能就是如此强大

    代码实现感谢@浩神@Q的前端世界两位大神

    未经允许不得转发!!!

  • 相关阅读:
    AVOID "throw e" !!!
    C++基本功: 全面掌握const, volatile 和 mutable关键字
    转贴:asp.netN层代码示例
    管理强类型生成器(Mgmtclassgen.exe) MSDN
    WMI 例子,获取MAC地址
    SQL Server: convert varbinary to varchar
    C++: memset, memcpy 和strcpy的根本区别
    巧妙突破win2003系统的种种限制
    Question about sql server's linked server
    iOS APP开发概述学习笔记001
  • 原文地址:https://www.cnblogs.com/huixin520/p/6943136.html
Copyright © 2011-2022 走看看