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 GD 图像处理组件的常用函数总结
Apr 28 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
php创建多级目录的方法
Mar 24 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
php $_SESSION会员登录实例分享
Jan 19 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 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
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
Vue组件化通讯的实例代码
2017/06/23 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
微信小程序如何连接Java后台
2019/08/08 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
python中import学习备忘笔记
2017/01/24 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
python中time、datetime模块的使用
2020/12/14 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
公务员年总结的自我评价
2013/10/25 职场文书
化工专业推荐信范文
2013/11/28 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
《去年的树》教学反思
2016/02/18 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang