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

PHPz
Freigeben: 2022-03-30 19:13:01
nach vorne
2705 Leute haben es durchsucht

怎么使用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>
Nach dem Login kopieren

运行结果如下图所示:

1.png

推荐学习:《PHP视频教程

Verwandte Etiketten:
php
Quelle:biancheng.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage