php简单实现日历
来源:互联网 发布:windows 桌面文件管理 编辑:程序博客网 时间:2024/06/06 00:04
使用php简单的做了一个日历,对php的时间函数又有了一个全新的提升认识!
实现日历其实也比较简单,主要有几步:
1. 首先调整好一个要显示的基本样式
2. 获取每个月第一天星期几(主要是为了显示日期前面空格填充)
3. 使用mktime()根据给出的时间参数获取对应的时间戳,然后转换成具体的年和月...
代码如下:
1. 首先显示星期(日,一,二,三,四,五,六); 这个很好弄,定义一个数组,使用循环输出就行了
#获取周日到周六 private function weeks() { $arr = array('日', '一', '二', '三', '四', '五', '六'); echo "<tr>"; for ($i = 0; $i < count($arr); ++$i) { echo "<td>" .$arr[$i]. "</td>"; } echo "</tr>"; }
2. 然后初始化年和月; 创建一个构造函数初始化当前的年和月,和每月第一天的周几和每个月具体的天数
private $year; // 年 private $month; // 月 private $current_week; // 每月份第一天的周几 private $month_day; // 月份的天数 public function __construct() { date_default_timezone_set("Asia/Shanghai"); $this->year = isset($_GET['year']) ? $_GET['year'] : date("Y"); $this->month = isset($_GET['month']) ? $_GET['month'] : date("m"); $this->current_week = date("w", mktime(0, 0, 0, $this->month, 1, $this->year) ); $this->month_day = date("t", mktime(0, 0, 0, $this->month, 1, $this->year)); }
小解: w:表示星期中的第几天; t: 表示每个月的实际总天数
3. 开始循环天数,首先确定月份第一天是周几后,输出空格(比如一号是周2,就输出两个空格,依次类推...)
#循环获取天数 private function days() { echo "<tr>"; //输出空格 for ($b = 0; $b < $this->current_week; ++$b) { echo "<td> </td>"; } //输出天数 for ($a = 1; $a <= $this->month_day; ++$a) { $b++; if ($a == date("d")) { echo "<td style='background:blue;'>" . $a . "</td>"; } else { echo "<td>" . $a . "</td>"; } if ($b%7 === 0) { echo "<tr></tr>"; } } echo "</tr>"; }
最后一个初步的日历显示出来了,效果如下:
4. 接着来:显示出当前的年和月;就是把当前的年和月输出即可,然后在年和月上面增加一个超链接(实际操作时ajax异步来处理的)然后点击就进行年和月的切换:
//点击改变年和月 private function changedate() { echo "<a href='?".$this->changeYear($this->year, $this->month)."'> <<< </a> "; echo "<a href='?".$this->changeMonth($this->year, $this->month)."'> << </a> "; echo $this->year ." ". $this->month; echo "<a href='?".$this->changeMonthAdd($this->year, $this->month)."'> >> </a>"; echo " <a href='?".$this->changeYearAdd($this->year, $this->month)."'> >>> </a>"; }
在超链接上我是学习别人使用的方法形式。(年份)具体方法如下:
//改变年(减) private function changeYear($year, $month) { $year = $year - 1; return "year=" . $year . "&month=" . $month; } //改变月份(减) private function changeMonth($year, $month) { if ($month == 1 || $month == "01") { $year = $year - 1; $month = 12; } else { $month--; } return "year=" . $year . "&month=" . $month; } //改变年(加) private function changeYearAdd($year, $month) { $year = $year + 1; return "year=" . $year . "&month=" . $month; } //改变月份(加) private function changeMonthAdd($year, $month) { if ($month == 12) { $year = $year + 1; $month = 1; } else { $month++; } return "year=" . $year . "&month=" . $month; }
这里的实现使用了一个简单的小小算法:
1.1 当年份是向后(减)的时候,对当前的年进行减一,然后通过链接以get的方式传递过去,在获取时,通过$_GET超全局数组来获取到传递过来的值,月份同样是如此操作的。
1.2 当月份向后(减)的时候,月份总共12个月,当月份为一月份的时候,对年减一,然后月份为12份,相当于意思就是:年份减一,向后退了一年,月份是12月份。返过来月份相加时,年份加一,月份是一月份。
代码就是上面的四个方法。
整体代码如下:
<?php namespace Admin\Controller;class IndexController extends \Think\Controller{ private $year; //年 private $month; //月 private $current_week; //当前月第一天的周几 private $month_day; // 前月的天数 public function __construct() { date_default_timezone_set("Asia/Shanghai"); $this->year = isset($_GET['year']) ? $_GET['year'] : date("Y"); $this->month = isset($_GET['month']) ? $_GET['month'] : date("m"); $this->current_week = date("w", mktime(0, 0, 0, $this->month, 1, $this->year) ); $this->month_day = date("t", mktime(0, 0, 0, $this->month, 1, $this->year)); } public function index() { $this->outputs(); } #输出 private function outputs() { echo "<table border='1'>"; $this->changedate(); $this->weeks(); $this->days(); echo "</table>"; } #获取周日到周六 private function weeks() { $arr = array('日', '一', '二', '三', '四', '五', '六'); echo "<tr>"; for ($i = 0; $i < count($arr); ++$i) { echo "<td>" .$arr[$i]. "</td>"; } echo "</tr>"; } #循环获取天数 private function days() { echo "<tr>"; for ($b = 0; $b < $this->current_week; ++$b) { echo "<td> </td>"; } for ($a = 1; $a <= $this->month_day; ++$a) { $b++; if ($a == date("d")) { echo "<td style='background:blue;'>" . $a . "</td>"; } else { echo "<td>" . $a . "</td>"; } if ($b%7 === 0) { echo "<tr></tr>"; } } echo "</tr>"; } //改变年 private function changeYear($year, $month) { $year = $year - 1; return "year=" . $year . "&month=" . $month; } //改变月份 private function changeMonth($year, $month) { if ($month == 1 || $month == "01") { $year = $year - 1; $month = 12; } else { $month--; } return "year=" . $year . "&month=" . $month; } //改变年 private function changeYearAdd($year, $month) { $year = $year + 1; return "year=" . $year . "&month=" . $month; } //改变月份 private function changeMonthAdd($year, $month) { if ($month == 12) { $year = $year + 1; $month = 1; } else { $month++; } return "year=" . $year . "&month=" . $month; } //点击改变年和月 private function changedate() { echo "<a href='?".$this->changeYear($this->year, $this->month)."'> <<< </a> "; echo "<a href='?".$this->changeMonth($this->year, $this->month)."'> << </a> "; echo $this->year ." ". $this->month; echo "<a href='?".$this->changeMonthAdd($this->year, $this->month)."'> >> </a>"; echo " <a href='?".$this->changeYearAdd($this->year, $this->month)."'> >>> </a>"; }}
最终效果:
样式很丑,没有去调整,整个流程走了一遍,主要是为了学习。相互学习,相互交流;
欢迎一起学习:微信号:zhaoyufengxixi QQ号:1526607040
- php简单实现日历
- PHP实现的简单日历代码
- PHP实现的简单日历类
- PHP 简单日历
- 一个简单PHP日历
- Php简单日历
- php 实现日历
- 实现简单日历
- JavaScript实现简单日历
- UICollectionView简单实现日历
- 实现简单日历功能
- 简单实现日历功能
- 简单的PHP日历算法
- php实现一个日历类
- iSO简单的日历实现
- js实现简单的日历
- 实现一个简单的日历
- php实现日历超清晰代码
- 第5章 文件管理和索引
- CAS实现SSO单点登录原理
- if-elseif-else语句
- 为什么tcp建立连接是三次握手而不是两次握手或者四次握手?(笔试面试常考)
- 记一次成功面试经历的问题和最近遇到的问题
- php简单实现日历
- python scatter参数详解
- msyql创建用户并授权
- Android架构师之路
- 设计模式(Design Pattern)
- Mysql技术内幕InnoDB存储引擎读书笔记--《五》索引与算法
- 发现一个奇怪的博客
- python 画子图(add_subplot & subplot)
- python直接生成exe的方法(使用py2exe)