PHP--实现日历查看功能

之前在imooc分享了一个HTML+CSS+ASP 实现日历功能,并且提到有时间再分享一个PHP的。俺的PHP是在慕课上学的,一点一点从基础开始,当然也看了PHP的一些入门书籍,例如:《PHP与MySQL 5程序设计》,最近在跟着学ThinkPHP,感觉框架整体使用还是很爽的,尤其是对数据库操作方面。言归正传,分享一下php实现日历查看功能

代码一:处理上一个月或下一个月

<?php
    $weekarray=array("1","2","3","4","5","6","7");//定义星期几的数组
    function _post($str){ 
        $val = !empty($_POST[$str]) ? $_POST[$str] : null;
        return $val;
    }
    if (_post("hiddendate")=="")
    {
        $tdate=date("Y-m-d");
    }
    else
    {
        if(_post("hiddenflag")=="1")
        {
            $tdate=date("Y-m-d",strtotime(_post("hiddendate").'-1 month'));
            //date("m",-1,date(_post("hiddendate")));
        }
        elseif(_post("hiddenflag")=="2")
        {
            $tdate=date("Y-m-d",strtotime(_post("hiddendate").'+1 month'));
        }                 
    }
    $date_elements = explode("-" ,$tdate);
?>            

代码二:处理日期对应得星期,其实这段代码结构并不复杂,但是由于是面向过程开发,而且我直接把php嵌套到html里所以看着感觉不是很好,希望以后对php的理解提高了,可以把代码优化的更好。ps(主要是我的样式设计时最右边会有border重叠问题,所以不得不多次判断是否为最右边)

<?php
    //dim flag,monF,tdmonth,html,tFlag,i,w,dayTag
    $flag=0;                                        //满足星期几的标记
    $monF=$date_elements[0]."-".$date_elements[1]."-01"; //每月的第一天
    $tdmonth=$date_elements[1];        //存放当前是第几月,用来判断当前日期是否属于这个月份,不属于则跳出
    $tFlag=0;               //跳出第1个for循环后,跳出第2个for循环的标记
    $html="";                    //存放生成的html代码

    for($i=1;$i<=6;$i++){
        $html=$html."<div class = 'cont_all'>";
        for($w=1;$w<=7;$w++){
            if($weekarray[date('w',strtotime($monF))]==$w) //判断当前是星期几
            { 
                if ($flag==0)
                {
                    $flag=1;
                }
            }
        $date_monF = explode("-" ,$monF);//将每月的第一天拆分成,年、月、日

        if ($flag==1){ 
            if ($monF==date("Y-m-d"))
            {
                $dayTag="<div class = 'cont_dayTag'><b>".date('d',strtotime($monF))."</b></div>";
            }
            else if($monF==$tdate){
                $dayTag="<div class='cont_dayTag_else'>".date('d',strtotime($monF))."</div>";
            }
            else{
                $dayTag="<div class='cont_dayTag_end'>".date('d',strtotime($monF))."</div>";
            }

        if($date_monF[1] != date('m'))
        {  
            if ($date_monF[2]== date('d')){
                if ($w == 7)//判断是否是星期六,考虑到最右边的css样式'
                {
                    $html=$html."<div class = 'cont_dayTag_right_s'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all_s'  >".$dayTag."</div>";
                }
            }
            else if($monF == $tdate){
                if ($w == 7)
                {
                    $html=$html."<div class = 'cont_dayTag_right_s'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all_s'  >".$dayTag."</div>";
                }
            }
            else{
                if($w == 7)
                {
                    $html=$html."<div class = 'cont_dayTag_right_s'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all_s'  >".$dayTag."</div>";
                }
            }
        }
        else
        {
            if ($date_monF[2]== date('d')){
                if ($w == 7)//判断是否是星期六,考虑到最右边的css样式'
                {
                    $html=$html."<div class = 'cont_dayTag_right'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all'  >".$dayTag."</div>";
                }
            }
            else if($monF == $tdate){
                if ($w == 7)
                {
                    $html=$html."<div class = 'cont_dayTag_right_s'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all_s'  >".$dayTag."</div>";
                }
            }
            else{
                if($w == 7)
                {
                    $html=$html."<div class = 'cont_dayTag_right_s'  >".$dayTag."</div>";
                }
                else
                {
                    $html=$html."<div class = 'cont_dayTag_all_s'  >".$dayTag."</div>";
                }
            }
        }

        $monF = date("Y-m-d",strtotime($monF.'+1 day'));
        }
        else{
            if ($w == 7)
            {
                $html=$html."<div class = 'cont_dayTag_right_s'></div>";
            }
            else
            { 
                $html=$html."<div class = 'cont_dayTag_all_s'></div>";
            }
        } 
        if (date('m',strtotime($monF))!=$tdmonth)
        {
            $tFlag=1;
            break;  
        }
        }
        $html=$html."</div>";
        if ($tFlag==1)
        { 
            break;    
        }    
    }
?>
<?php echo $html; ?>

关于样式的代码请参考 Html+css+Asp 实现日历功能。
之前的代码格式确实很差,这点我在写php的时候也发现了。
功能最后可以用mvc实现,那样的话代码二看起来就好多了。
日历功能主要用到了php中的date()函数,以及两个for循环的逻辑。
再此,感谢慕课网能够提供这么多免费开源的优秀课程。
与慕课的小伙伴们共勉。

点赞