Maison développement back-end tutoriel php 浅析怎么使用PHP实现简单的日历程序?(附代码)

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

Jul 29, 2016 am 08:35 AM
php

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

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

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

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

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

<?php
    class Calendar{
        private $year, $month, $start_week, $days;
        /**
         * 构造方法,用来初始化一些日期属性
         */
        function __construct(){
            $this->year = isset($_GET['year'])?$_GET['year']:date('Y');
            $this->month = isset($_GET['month'])?$_GET['month']:date('m');
            $this->start_week = date('w', mktime(0, 0, 0, $this->month, 1, $this->year));
            $this->days = date('t', mktime(0, 0, 0, $this->month, 1, $this->year));
        }
        /**
         * 魔术方法,用来打印整个日历
         * @return string [日历的html代码]
         */
        function __toString(){
            $output = '';
            $output = '<table>';
            $output .= $this->changeDate();
            $output .= $this->weeksList();
            $output .= $this->daysList();
            $output .= '</table>';
            return $output;
        }
        /**
         * 输出周列表
         * @return [string] [html 代码]
         */
        private function weeksList($output=''){
            $week = array('日','一','二','三','四','五','六');
            $output .= '<tr>';
            for ($i=0; $i < count($week); $i++) {
                $output .= '<th>'.$week[$i].'</th>';
            }
            $output .= '</tr>';
            return $output;
        }
        /**
         * 输出日期列表
         * @return [string]
         */
        private function daysList($output=''){
            $output .= '<tr>';
            for ($i=0; $i < $this->start_week; $i++) {
                $output .= '<td> </td>';
            }
            for ($j=1; $j <= $this->days; $j++) {
                $i++;
                if($j == date('d') && $this->year == date('Y') && $this->month == date('m')){
                    $output .= '<td>'.$j.'</td>';
                }else{
                    $output .= '<td>'.$j.'</td>';
                }
                if($i%7 == 0) $output .= '</tr><tr>';
            }
            while($i%7 !== 0){
                $output .= '<td> </td>';
                $i++;
            }
            $output .= '</tr>';
            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='', $url='index.php'){
            $output .= '<tr>';
            $output .= '<td><a href="'.$url.'?'.$this->prevYear($this->year, $this->month).'">'.'<<'.'</a></td>';
            $output .= '<td><a href="'.$url.'?'.$this->prevMonth($this->year, $this->month).'">'.'<'.'</a></td>';
            $output .= '<td colspan="3">';
            $output .= '<form>';
            $output .= '<select name="year" onchange="window.location=\''.$url.'?year=\'+this.options[selectedIndex].value+\'&month='.$this->month.'\'">';
            for ($i=1970; $i <=2038; $i++) {
                $selected = ($i == $this->year)?'selected="selected"':'';
                $output .= '<option value="'.$i.'" '.$selected.'>'.$i.'</option>';
            }
            $output .= '</select>';
            $output .= '<select name="month" onchange="window.location=\''.$url.'?year='.$this->year.'&month=\'+this.options[selectedIndex].value">';
            for ($j=1; $j <=12; $j++) {
                $selected = ($j == $this->month)?'selected="selected"':'';
                $output .= '<option value="'.$j.'" '.$selected.'>'.$j.'</option>';
            }
            $output .= '</select>';
            $output .= '</form>';
            $output .= '</td>';
            $output .= '<td><a href="'.$url.'?'.$this->nextMonth($this->year, $this->month).'">'.'>'.'</a></td>';
            $output .= '<td><a href="'.$url.'?'.$this->nextYear($this->year, $this->month).'">'.'>>'.'</a></td>';
            $output .= '</tr>';
            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>
Copier après la connexion

运行结果如下图所示:

1.png

推荐学习:《PHP视频教程

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Date et heure de CakePHP

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Configuration du projet CakePHP

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Téléchargement de fichiers CakePHP

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Routage CakePHP

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

Discuter de CakePHP

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

Guide rapide CakePHP

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Comment configurer Visual Studio Code (VS Code) pour le développement PHP

See all articles