浅析怎么使用PHP实现简单的日历程序?(附代码)

PHPz
发布: 2022-03-30 19:13:01
转载
2705 人浏览过

怎么使用PHP实现简单的日历程序?本篇文章就通过一个代码示例来大家了解一下使用PHP实现简单日历程序的方法,希望对大家有帮助。

浅析怎么使用PHP实现简单的日历程序?(附代码)

说到对日期和时间的处理,就一定要介绍一下日历程序的编写,大多数读者可能都会认为日历的作用只是为了在页面上显示当前的日期,其实不然,日历在我们的开发中有着更重要的作用。例如,我们开发一个“记事本”就需要通过日历设定日期,另外在一些系统中需要按日期去安排任务也需要用到日历等等。

本节的示例中涉及的日期和时间函数并不是很多,都是前面介绍的,主要是通过编写一个日历类来巩固一下前面介绍的面向对象,以及时间函数应用,同时示例中涉及到一些前端知识,感兴趣的读者可以阅读本站提供的 HTML教程 和 CSS 教程

完整的示例代码如下所示:

<?php
    class Calendar{
        private $year, $month, $start_week, $days;
        /**
         * 构造方法,用来初始化一些日期属性
         */
        function __construct(){
            $this->year = isset($_GET[&#39;year&#39;])?$_GET[&#39;year&#39;]:date(&#39;Y&#39;);
            $this->month = isset($_GET[&#39;month&#39;])?$_GET[&#39;month&#39;]:date(&#39;m&#39;);
            $this->start_week = date(&#39;w&#39;, mktime(0, 0, 0, $this->month, 1, $this->year));
            $this->days = date(&#39;t&#39;, mktime(0, 0, 0, $this->month, 1, $this->year));
        }
        /**
         * 魔术方法,用来打印整个日历
         * @return string [日历的html代码]
         */
        function __toString(){
            $output = &#39;&#39;;
            $output = &#39;<table>&#39;;
            $output .= $this->changeDate();
            $output .= $this->weeksList();
            $output .= $this->daysList();
            $output .= &#39;</table>&#39;;
            return $output;
        }
        /**
         * 输出周列表
         * @return [string] [html 代码]
         */
        private function weeksList($output=&#39;&#39;){
            $week = array(&#39;日&#39;,&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;);
            $output .= &#39;<tr>&#39;;
            for ($i=0; $i < count($week); $i++) {
                $output .= &#39;<th>&#39;.$week[$i].&#39;</th>&#39;;
            }
            $output .= &#39;</tr>&#39;;
            return $output;
        }
        /**
         * 输出日期列表
         * @return [string]
         */
        private function daysList($output=&#39;&#39;){
            $output .= &#39;<tr>&#39;;
            for ($i=0; $i < $this->start_week; $i++) {
                $output .= &#39;<td> </td>&#39;;
            }
            for ($j=1; $j <= $this->days; $j++) {
                $i++;
                if($j == date(&#39;d&#39;) && $this->year == date(&#39;Y&#39;) && $this->month == date(&#39;m&#39;)){
                    $output .= &#39;<td>&#39;.$j.&#39;</td>&#39;;
                }else{
                    $output .= &#39;<td>&#39;.$j.&#39;</td>&#39;;
                }
                if($i%7 == 0) $output .= &#39;</tr><tr>&#39;;
            }
            while($i%7 !== 0){
                $output .= &#39;<td> </td>&#39;;
                $i++;
            }
            $output .= &#39;</tr>&#39;;
            return $output;
        }
        /**
         * 处理上一年的数据
         * @param  [type] $year  [年份]
         * @param  [type] $month [月份]
         * @return [type]        [description]
         */
        private function prevYear($year, $month){
            $year -= 1;
            if($year < 1970) $year = 1970;
            return "year=$year&month=$month";
        }
        /**
         * 处理上一月的数据
         * @param  [type] $year  [年份]
         * @param  [type] $month [月份]
         * @return [type]        [description]
         */
        private function prevMonth($year, $month){
            if($month == 1){
                $year -= 1;
                if($year < 1970) $year = 1970;
                $month = 12;
            }else{
                $month--;
            }
            return "year=$year&month=$month";
        }
        /**
         * 处理下一年的数据
         * @param  [type] $year  [年份]
         * @param  [type] $month [月份]
         * @return [type]        [description]
         */
        private function nextYear($year, $month){
            $year += 1;
            if($year > 2038) $year = 2038;
            return "year=$year&month=$month";
        }
        /**
         * 处理下一月的数据
         * @param  [type] $year  [年份]
         * @param  [type] $month [月份]
         * @return [type]        [description]
         */
        private function nextMonth($year, $month){
            if($month == 12){
                $year --;
                if($year > 2038) $year = 2038;
                $month = 1;
            }else{
                $month++;
            }
            return "year=$year&month=$month";
        }
        /**
         * 调整年份和月份
         * @param  string $output [html代码]
         * @param  string $url   
         * @return [type]        
         */
        private function changeDate($output=&#39;&#39;, $url=&#39;index.php&#39;){
            $output .= &#39;<tr>&#39;;
            $output .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->prevYear($this->year, $this->month).&#39;">&#39;.&#39;<<&#39;.&#39;</a></td>&#39;;
            $output .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->prevMonth($this->year, $this->month).&#39;">&#39;.&#39;<&#39;.&#39;</a></td>&#39;;
            $output .= &#39;<td colspan="3">&#39;;
            $output .= &#39;<form>&#39;;
            $output .= &#39;<select name="year" onchange="window.location=\&#39;&#39;.$url.&#39;?year=\&#39;+this.options[selectedIndex].value+\&#39;&month=&#39;.$this->month.&#39;\&#39;">&#39;;
            for ($i=1970; $i <=2038; $i++) {
                $selected = ($i == $this->year)?&#39;selected="selected"&#39;:&#39;&#39;;
                $output .= &#39;<option value="&#39;.$i.&#39;" &#39;.$selected.&#39;>&#39;.$i.&#39;</option>&#39;;
            }
            $output .= &#39;</select>&#39;;
            $output .= &#39;<select name="month" onchange="window.location=\&#39;&#39;.$url.&#39;?year=&#39;.$this->year.&#39;&month=\&#39;+this.options[selectedIndex].value">&#39;;
            for ($j=1; $j <=12; $j++) {
                $selected = ($j == $this->month)?&#39;selected="selected"&#39;:&#39;&#39;;
                $output .= &#39;<option value="&#39;.$j.&#39;" &#39;.$selected.&#39;>&#39;.$j.&#39;</option>&#39;;
            }
            $output .= &#39;</select>&#39;;
            $output .= &#39;</form>&#39;;
            $output .= &#39;</td>&#39;;
            $output .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->nextMonth($this->year, $this->month).&#39;">&#39;.&#39;>&#39;.&#39;</a></td>&#39;;
            $output .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->nextYear($this->year, $this->month).&#39;">&#39;.&#39;>>&#39;.&#39;</a></td>&#39;;
            $output .= &#39;</tr>&#39;;
            return $output;
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PHP实现简单的日历程序</title>
    <style>
        table{
            border: 1px solid #ccc;
        }
        .fontb{
            color: white;
            background: blue;
        }
        th{
            width: 30px;
        }
        td,th{
            height:30px;
            text-align: center;
        }
        form{
            margin: 0px;
            padding: 0px;
        }
    </style>
</head>
<body>
    <?php
        $calendar = new Calendar;
        echo $calendar;
    ?>
</body>
</html>
登录后复制

运行结果如下图所示:

1.png

推荐学习:《PHP视频教程

相关标签:
php
来源:biancheng.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板