PHP制作万年历


Posted in PHP onJanuary 07, 2015

使用PHP实现万年历功能的要点:

得到当前要处理的月份总共有多少天$days
得到当前要处理的月份的一号是星期几$dayofweek
$days的作用:知道要处理的月份共有多少天,就可以通过循环输出天数了

$dayofweek的作用:只有知道每个月的1号是星期几,才能知道在输出天数之前需要输出多少空格(空白)

最终效果图如下:

PHP制作万年历

“万年历类”的代码如下:

<?php

/**

 * PHP万年历

 * @author Fly 2012/10/16

 */

class Calendar{

    protected $_table;//table表格

    protected $_currentDate;//当前日期

    protected $_year;    //年

    protected $_month;    //月

    protected $_days;    //给定的月份应有的天数

    protected $_dayofweek;//给定月份的 1号 是星期几

    /**

     * 构造函数

     */

    public function __construct() 

    {

        $this->_table="";

        $this->_year  = isset($_GET["y"])?$_GET["y"]:date("Y");

        $this->_month = isset($_GET["m"])?$_GET["m"]:date("m");

        if ($this->_month>12){//处理出现月份大于12的情况

            $this->_month=1;

            $this->_year++;

        }

        if ($this->_month<1){//处理出现月份小于1的情况

            $this->_month=12;

            $this->_year--;

        }

        $this->_currentDate = $this->_year.'年'.$this->_month.'月份';//当前得到的日期信息

        $this->_days           = date("t",mktime(0,0,0,$this->_month,1,$this->_year));//得到给定的月份应有的天数

        $this->_dayofweek    = date("w",mktime(0,0,0,$this->_month,1,$this->_year));//得到给定的月份的 1号 是星期几

    }

    /**

     * 输出标题和表头信息

     */

    protected function _showTitle()

    {

        $this->_table="<table><thead><tr align='center'><th colspan='7'>".$this->_currentDate."</th></tr></thead>";

        $this->_table.="<tbody><tr>";

        $this->_table .="<td style='color:red'>星期日</td>";

        $this->_table .="<td>星期一</td>";

        $this->_table .="<td>星期二</td>";

        $this->_table .="<td>星期三</td>";

        $this->_table .="<td>星期四</td>";

        $this->_table .="<td>星期五</td>";

        $this->_table .="<td style='color:red'>星期六</td>";

        $this->_table.="</tr>";

    }

    /**

     * 输出日期信息

     * 根据当前日期输出日期信息

     */

    protected function _showDate()

    {

        $nums=$this->_dayofweek+1;

        for ($i=1;$i<=$this->_dayofweek;$i++){//输出1号之前的空白日期

            $this->_table.="<td> </td>";

        }

        for ($i=1;$i<=$this->_days;$i++){//输出天数信息

            if ($nums%7==0){//换行处理:7个一行

                $this->_table.="<td>$i</td></tr><tr>";    

            }else{

                $this->_table.="<td>$i</td>";

            }

            $nums++;

        }

        $this->_table.="</tbody></table>";

        $this->_table.="<h3><a href='?y=".($this->_year)."&m=".($this->_month-1)."'>上一月</a>   ";

        $this->_table.="<a href='?y=".($this->_year)."&m=".($this->_month+1)."'>下一月</a></h3>";

    }

    /**

     * 输出日历

     */

    public function showCalendar()

    {

        $this->_showTitle();

        $this->_showDate();

        echo $this->_table;

    }

}

$calc=new Calendar();

$calc->showCalendar();

效果还不错吧,小伙伴们还可以自己美化下,这里就不多做说明了。

PHP 相关文章推荐
用php写的serv-u的web申请账号的程序
Oct 09 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
选择PHP作为网站开发语言的原因分享
Jan 03 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
PHP中如何定义和使用常量
Feb 28 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 #PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
给ECShop添加最新评论
Jan 07 #PHP
php程序总是提示验证码输入有误解决方案
Jan 07 #PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 #PHP
php中的动态调用实例分析
Jan 07 #PHP
Zend Guard使用指南及问题处理
Jan 07 #PHP
You might like
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python文件写入write()的操作
2019/05/14 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
机关节能减排实施方案
2014/03/17 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
会计工作态度自我评价
2015/03/06 职场文书
南京大屠杀观后感
2015/06/02 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS