首页 php教程 php手册 浅谈PHP第八弹---使用PHP的date函数输出日历

浅谈PHP第八弹---使用PHP的date函数输出日历

Jun 13, 2016 am 10:49 AM
date php 使用 函数 日历 输出

Hello,大家好,前两天给大家讲解了下RBAC【基于角色的访问控制】的基本思想,不知道大家是否已经明白其原理,使用起来是否得心应手,在开发项目的过程中可以尝试运用下,这样会理解的更加透彻,上文中给大家写的那个RBAC类,并不一定真正适合我们的项目开发,给大家写此类的目的只为帮助大家更透彻的理解RBAC的工作原理以及使用方法...
好了,大家可能已经觉得我啰嗦了,废话不多说了,今天来给大家讲解:
在已知开始日期,已知结束日期的基础上,使用PHP的date函数遍历输出日历:
日常生活中,日历与我们的生活工作息息相关,必不可少,所以今天给大家讲了日历以后,大家可以尝试着做一个电子日历,每天提醒自己当天要完成的任务,还是很有趣的。
好,首先我们先来了解一下date函数,同学们都知道,date函数可以获取当前的年月日,但date函数的功能不仅限于此,我们通过PHP官方手册来查询下它的参数看看:


format 字符 说明 返回值例子
日 --- ---
d 月份中的第几天,有前导零的 2 位数字 01 到 31
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
j 月份中的第几天,没有前导零 1 到 31
l(“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j一起用
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
z 年份中的第几天 0 到 366
星期 --- ---
W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周)
月 --- ---
F 月份,完整的文本格式,例如 January 或者 March January 到 December
m 数字表示的月份,有前导零 01 到 12
M 三个字母缩写表示的月份 Jan 到 Dec
n 数字表示的月份,没有前导零 1 到 12
t 给定月份所应有的天数 28 到 31
年 --- ---
L 是否为闰年 如果是闰年为 1,否则为 0
o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
Y 4 位数字完整表示的年份 例如:1999 或 2003
y 2 位数字表示的年份 例如:99 或 03
时间 --- ---
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
B Swatch Internet 标准时 000 到 999
g 小时,12 小时格式,没有前导零 1 到 12
G 小时,24 小时格式,没有前导零 0 到 23
h 小时,12 小时格式,有前导零 01 到 12
H 小时,24 小时格式,有前导零 00 到 23
i 有前导零的分钟数 00 到 59>
s 秒数,有前导零 00 到 59>
时区 --- ---
e 时区标识(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores
I 是否为夏令时 如果是夏令时为 1,否则为 0
O 与格林威治时间相差的小时数 例如:+0200
P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) 例如:+02:00
T 本机所在的时区 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“EasternStandard Time”,中文版会显示“中国标准时间”)。
Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200
完整的日期/时间 --- ---
c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 

大家可以看到,php的date函数无所不能,那我们就用date函数来写一个日历出来:
/*+---------------------------------------------------------------------------------------+
| 日历类
+-----------------------------------------------------------------------------------------+
| 版权所有 lamp兄弟连
+-----------------------------------------------------------------------------------------+
| 作者: 李捷 (lijie@li-jie.me)
| 最后修改时间: 2012-05-9 12:30
+-----------------------------------------------------------------------------------------+
*/
class LampDate{
private $start_year; //开始年份
private $start_month; //开始月份
private $start_day; //开始日期
private $end_year; //结束年份
private $end_month; //结束月份
private $end_day; //结束日期
private $start_time; //开始时间的时间戳
private $end_time; //结束时间的时间戳
//定义周表头数组
private $week = array("星期一","星期二","星期三","星期四","星期五","星期六","星期日");
//开始时间月初的时间戳
private $start;
//开始时间月末的时间戳
private $end;
//样式表CSS文件路径
private $css;
//JS事件文件的路径
private $script;
/**
* 日历类构造方法
* @param start_year 开始年份
* @param start_month 开始月份
* @param start_day 开始日期
* @param end_year 结束年份
* @param end_month 结束月份
* @param end_day 结束日期
* @param css 输出日期的样式
* @param script 输出日期的事件
*/
public function __construct($start_year='2012',$start_month='1',$start_day='1',$end_year='2012',$end_month='12',$end_day='31',$css='style.css',$script='js.js'){
$this->start_year = $start_year; //给开始年份赋值
$this->start_month = $start_month; //给开始月份赋值
$this->start_day = $start_day; //给开始日期赋值
$this->end_year = $end_year; //给结束年份赋值
$this->end_month = $end_month; //给结束月份赋值
$this->end_day = $end_day; //给结束日期赋值
$this->css = $css; //指定日期的CSS
$this->script = $script; //指定日期的JS事件
//获取开始日期的时间戳
$this->start_time = strtotime($this->start_year."-".$this->start_month."-".$this->start_day);
//获取结束日期的时间戳
$this->end_time = strtotime($this->end_year."-".$this->end_month."-".$this->end_day);
//获取开始时间月初的时间戳
$this->start = strtotime($this->start_year."-".$this->start_month."-01");
//获取开始时间月末的时间戳
$this->end = strtotime($this->end_year."-".$this->end_month."-".date("t",$this->end_time));
//获取开始日期到结束日期的天数
$this->day_count = (($this->end)-($this->start))/(24*60*60);
}
/**
* 获取每月表格的表头
* @param i 从开始时间月初后的第几天
* @return 返回表头 --年--月
*/
private function get_caption($i){
//定义一个空字符串
$str ='';
$str.= "

";
$str.= "";
$str.= "";
$str.= "";
//返回表头
return $str;
}
/**
* 输出每月的星期表头方法
* @return 返回星期表头
*/
private function get_week(){
//定义一个空字符串
$str='';
$str.= "";
for($w=0;$w //遍历输出星期一至星期日
$str.= "";
}
$str.= "";
}
$str.= "";
//返回星期头
return $str;
}
/**
* 补全月份前端的空格
* @param i 从开始时间月初后的第i天
* @return 返回补全的空格
*/
private function get_space_front($i){
//定义一个空字符串
$str='';
//如果从开始时间月初后的第i天为星期一,输出一个tr换行
if(date("N",$this->start+($i*(24*60*60)))==1){
$str.= "";
}
//如果从开始时间月初后的第i天为该月的第一天,遍历输出空格
if(date("d",$this->start+($i*(24*60*60)))==1){
//星期n就输出n-1个空格
for($m=1;$mstart+($i*(24*60*60)));$m++){
$str.= "
";
}
}
//返回输出的空格
return $str;
}
/**
* 补全月份后端的空格
* @param i 从开始时间月初后的第i天
* @return 返回补全的空格
*/
private function get_space_back($i){
//定义一个空字符串
$str='';
//如果从开始时间月初后的第i天的天数为该月的月末
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60*60)))){
//星期n就输出7-n个空格
for($w=date("N",$this->start+($i*(24*60*60)));$w $str.= "";
}
}
//返回补全的空格
return $str;
}
/**
* 输出当前日期
* @return 返回日期
*/
private function get_date($i){
//定义一个空字符串
$str='';
//如果从开始时间月初后的第i天为开始日期,输出背景为#7CCD7C色的表格
if(date("Ymd",$this->start+($i*(24*60*60)))==$this->start_year.$this->start_month.$this->start_day){
$str.= "";
//返回输出的日期
return $str;
}
/**
* 输出补全的空行
* @param i 从开始时间月初后的第i天
* @param t 每月输出的行数
* @return 返回补全的空行
*/
private function get_rows($i,&$t){
//定义一个空字符串
$str='';
//如果从开始时间月初后的第i天为星期天
if(date("N",$this->start+($i*(24*60*60)))==7){
//换行
$str.= "";
//如果从开始时间月初后的第i天为本月的最后一天并且为周日
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60*60))) && date("N",$this->start+($i*(24*60*60)))==7){
//行数自减
$t--;
}
//行数自加
$t++;
}
//如果从开始时间月初后的第i天为本月的最后一天并且此时的行数小于6
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60*60))) && $t while($t //开始输出换行
$str.= "";
for($n=1;$n //输出七个空格
$str.= "";
}
$str.= "";
//行数自加一
$t++;
}
}
//输出补全的空行
return $str;
}
/**
* 结束表格的输出
* @param i 从开始时间月初后的第i天
* @param t 日期表格的行数
* @return 结束表格
*/
private function get_endtab($i,&$t){
//定义一个空字符串
$str='';
//如果从开始日期后的第i天为本月最后一天
if(date("d",$this->start+($i*(24*60*60)))==date("t",$this->start+($i*(24*60*60)))){
//输出结束表格
$str.= "
";
//获取开始时间月初第i天后的年和月
$str.= date("Y",$this->start+($i*(24*60*60)))."年".date("m",$this->start+($i*(24*60*60)))."月";
$str.= "
".$this->week[$w];
if($w==5 || $w==6){
//如果为周六或周日,添加放假的小图标
$str.= "浅谈PHP第八弹---使用PHP的date函数输出日历
";
//如果从开始时间月初后的第i天为结束日期,输出背景为#EE6363色的表格
}elseif(date("Ymd",$this->start+($i*(24*60*60)))==$this->end_year.$this->end_month.$this->end_day){
$str.= "
";
//如果从开始时间月初后的第i天为当前日期,输出背景为#EE2C2C色的表格
}elseif(date("ymd",$this->start+($i*(24*60*60)))==(date("ymd",time()))){
$str.= "
";
//否则输出无背景色的表格
}else{
$str.= "
";
}
//输出从开始时间月初后的第i天的日期
$str.= date("j",$this->start+($i*(24*60*60)));
$str.= "
";
//并将行数计数器改为1
$t=1;
}
//返回结束表格
return $str;
}
/**
* 获取输出月份表格的样式和事件
* @return 返回月份表格的样式和事件
*/
private function get_style(){
$str = "";
$str .= "";
//返回文件内容
return $str;
}
/**
* 获取日期表格
* @param i 从开始时间月初后的第i天,默认为0
* @return 返回日期表格
*/
public function get_datetab($i=0){
//获取样式和事件
$str = $this->get_style();
//按开始日期到结束日期的天数开始遍历日期
for($i=0,$t=1;$iday_count;$i++){
//如果为本月的第一天
if(date("d",$this->start+($i*(24*60*60)))==1){
//获取表头
$str.=$this->get_caption($i);
//获取星期表头
$str.=$this->get_week($i);
}
//补全表格前面的空格
$str.=$this->get_space_front($i);
//获取日期
$str.=$this->get_date($i);
//补全表格后面的空格
$str.=$this->get_space_back($i);
//定义日期表格的行数
$str.=$this->get_rows($i,$t);
//结束表格
$str.=$this->get_endtab($i,$t);
}
//返回日期表格
return $str;
}
}


我里面加了较全的注释,大家有什么不明白的地方可以跟帖回复提问,抑或我会在下一帖中再给大家详细讲解下大家共同遇到的问题,敬请期待....

输出效果:

我把代码发上来,大家可以下载研究下:

日历代码 date_class.rarhttp://bbs.lampbrother.net/job.php?action=download&aid=21095

 

 

作者 zdrjlamp

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

See all articles