《PHP典型模块与项目实战大全》第9章日程表模块(PHP+AJAX+XML),本章通过课程表模块的实现将AJAX技术介绍给读者,读者可以通过本章了解到AJAX的基本原理、PHP与AJAX是如何交互的,以及通过数据库驱动的AJAX。本节为大家介绍PHP生成的日历。

AD:

9.4  日历程序设计

日程表的前端程序的核心是,通过PHP脚本生成一个当前日期的日历表格,再通过遍历数据中的消息事件,在有事件提醒的日期生成一个有"event"标识的链接,单击该链接就可以异步将对应的提醒信息显示在日历表格的下方。

9.4.1  PHP生成的日历

PHP生成日历是这个模块逻辑上最复杂的部分,下面来看如何生成一个标准的日历。日历展示的部分是将星期和日期通过一张二维表格输出到浏览器中的。日历表格的形式如图9.6所示。

 
图9.6 日历表格样式

现在以2010年6月14日为例说明。6月份共有30天,在这个日历表中共5行,首先需要确定当前所在的日期(当然也可以指定一个日期),比如14日,通过表格可以知道它在第3行对应星期一那列(第3周)。通常每个月第1天不是在表格开始的位置,位置并不固定,同样不固定的还有每个月的周数,有时候是4周,有时候是5周。这样,想要完成这个日历表格就需要确定一些基础的日期变量,下面具体来看需要设定的基础变量。

PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。通过date()函数可以很容易获得上面的数据。

  1. <?php
  2. //date()函数的基本用法
  3. $year = date('Y');      //获得年份,例如2006
  4. $month = date('n');     //获得月份,例如04
  5. $day = date('j');       //获得日期,例如3
  6. ?>

通过mktime()函数和date()函数获得当月的总天数。

  1. //获得当月的总天数
  2. $daysInMonth = date("t",mktime(0,0,0,$month,1,$year));

同样是组合使用mktime()函数和date()函数,获得该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。

  1. //获得每个月的第一天,例如4
  2. $firstDay = date("w", mktime(0,0,0,$month,1,$year));

现在重新来观察下这个日历表格,我们发现,表格中的值是从1到x(当月的总天数)。我们可以形象地通过一个坐标来表示每一个位置(x,y),表格的起始位置是(0,0),结束位置是(5,4),当月第一天的起始位置是(0,3)。现在来创建一个二维数组来存储对应的日期。

(1)需要获得表格的数目。

  1. //计算数组中的日历表格数
  2. $tempDays = $firstDay + $daysInMonth;

(2)需要算出该月一共有几周(即表格的行数)。

  1. //获得表格行数
  2. $weeksInMonth = ceil($tempDays/7);

(3)在获得行数的变量之后,创建一个二维数组用来存放日期信息,代码如下:

  1. <?php
  2. for($j=0;$j&lt;$weeksInMonth;$j++)
  3. {
  4. for($i=0;$i&lt;7
  5. ;$i++)
  6. {
  7. $counter ++;
  8. $week [$j] [$i] = $counter;
  9. }
  10. }
  11. ?>

(4)细心的读者可能发现,上面的代码其实是一个雏型,因为它处理出来的数据并没有过滤那些空白的表格单元。下面来继续改造下这段代码,加入过滤和构造的部分。改造后的代码如下:

  1. <?php
  2. //创建日期二维数组
  3. for($j = 0; $j < $weeksInMonth; $j ++) {
  4. for($i = 0; $i < 7; $i ++) {
  5. $counter ++;
  6. $week [$j] [$i] = $counter;
  7. //日期偏移量
  8. $week [$j] [$i] -= $firstDay;
  9. if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
  10. $week [$j] [$i] = "";
  11. }
  12. }
  13. }
  14. ?>

(5)在获得正确的二维数组之后,就可以通过foreach()函数将存储的日期信息遍历出来,同时插入HTML标签创建日期,代码如下:

  1. <?php
  2. $year = date ( 'Y' );   //获得年份, 例如: 2006
  3. $month = date ( 'n' );  //获得月份, 例如: 04
  4. $day = date ( 'j' );    //获得日期, 例如: 3
  5. $firstDay = date ( "w", mktime ( 0, 0, 0, $month, 1, $year ) );
  6. //获得当月第一天
  7. $daysInMonth = date ( "t", mktime ( 0, 0, 0, $month, 1, $year ) );
  8. //获得当月的总天数
  9. //echo $daysInMonth;
  10. $tempDays = $firstDay + $daysInMonth;   //计算数组中的日历表格数
  11. $weeksInMonth = ceil ( $tempDays/7 );   //算出该月一共有几周(即表格的行数)
  12. //创建一个二维数组
  13. for($j = 0; $j < $weeksInMonth; $j ++) {
  14. for($i = 0; $i < 7; $i ++) {
  15. $counter ++;
  16. $week [$j] [$i] = $counter;
  17. //offset the days
  18. $week [$j] [$i] -= $firstDay;
  19. if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
  20. $week [$j] [$i] = "";
  21. }
  22. }
  23. }
  24. ?>
  25. <script type="text/JavaScript" src="calendar.js"></script>
  26. <table width="400" border="1" cellpadding="2" cellspacing="2">
  27. <tr>
  28. <th colspan='7'>
  29. <?php
  30. echo date ( 'M', mktime ( 0, 0, 0, $month, 1, $year ) ) . ' ' .             $year;
  31. ?>
  32. </th>
  33. </tr>
  34. <tr>
  35. <th>Sun</th>
  36. <th>Mon</th>
  37. <th>Tue</th>
  38. <th>Wed</th>
  39. <th>Thur</th>
  40. <th>Fri</th>
  41. <th>Sat</th>
  42. </tr>
  43. <?php
  44. foreach ( $week as $key => $val ) {
  45. echo "<tr>";
  46. for($i = 0; $i < 7; $i ++) {
  47. echo "<td align='center'>" . $val [$i] . "</td>";
  48. }
  49. echo "</tr>";
  50. }
  51. ?>

(6)在浏览器中运行上面的代码,得到一个完整的日历表格,效果如图9.7所示。

 
图9.7 PHP生成日历

来源:http://blog.sina.com.cn/s/blog_8a18c33d010158p3.html

PHP生成日历(实例详解)相关推荐

  1. php dsa 签名,openssl使用DSA算法生成签名实例详解_PHP教程

    文章给大家介绍基于openssl使用DSA算法生成签名实例,生成签名方法很简单,我们需要懂得中间的原理就比较复杂了,大家一起来看看吧. 命令: openssl> dgst -dss1 -sign ...

  2. python解析二维码_Python二维码生成识别实例详解

    前言 在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很低.不过就最新版本的测试来说,识别率有了现显著提高. 对比 ...

  3. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  4. Php公钥加密data是空,php 生成加密公钥加密私钥实例详解

    php 生成加密公钥加密私钥实例详解 生成公钥私钥 win下必须要openssl.cof支持 liunx一般已自带安装 $config = array( //"digest_alg" ...

  5. python生成二维码_python生成二维码的实例详解

    python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...

  6. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  7. java pdf 页眉_itext生成PDF设置页眉页脚的实例详解

    itext生成PDF设置页眉页脚的实例详解 实例代码: /** * ITextTest * iText生成PDF加入列表,注释等内容,同时设置页眉和页脚及页码等. */ package com.lab ...

  8. python字库转文字图片_对Python生成汉字字库文字,以及转换为文字图片的实例详解...

    对Python生成汉字字库文字,以及转换为文字图片的实例详解 发布时间:2020-10-05 17:20:03

  9. android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...

  10. java生成字符串数组_Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...

最新文章

  1. Linux下php5.3编译oracle客户端
  2. php特殊函数,PHP常用特殊运算符号和函数的简单示例
  3. java后期发展方向_2020年前3季度工程自卸车市场咋样?后期朝啥方向发展?
  4. 通过微软虚拟wifi接入点共享网络连接的方法以及一个问题的解决方案
  5. 单目相机 svd 从图像恢复3维位置_论文学习——VINSMono:一种鲁棒且通用的单目视觉惯性系统...
  6. python远程登录并执行命令_Python - 远程SSH执行命令
  7. 新增或编辑保存时出错后,页面无法再次编辑
  8. 信息论与编码_庆祝中山大学计算机科学系成立40周年系列活动 | 第四届“信息论与编码中大论坛”...
  9. vue实现导出excel的两种方式
  10. 14届数独-真题标准数独-Day 10-20220125
  11. 怎么把m4a文件变成mp3格式
  12. ChatGPT连接企微
  13. 数学基础知识总结 —— 7. 行列式的基本知识
  14. 艾宾浩斯遗忘曲线PHP,艾宾浩斯遗忘曲线计划表打印版
  15. 用SQL语句更改数据库名
  16. 图像滤波边界处理方法对图像滤波的影响
  17. (翻译)标签云(Tag Cloud)
  18. Apollo详解之定位模块——RTK定位
  19. 测试人员面试需要掌握的内容,软件测试面试题答案
  20. oracle11.0安装教程,ORACLE 11g 安装教程

热门文章

  1. 卡尔曼滤波器求速度matlab,卡尔曼滤波器算法浅析及matlab实战
  2. ANT不完全总结,包含各种命令,ant例子等,转自:http://lavasoft.blog.51cto.com/62575/87306
  3. 9Linux服务器编程之:mkdir()函数和rmdir()函数
  4. Hibernate缓存和ehcache
  5. Android中活动Activity方面的知识点
  6. SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解
  7. 目标检测特殊层:PSROIPooling详解
  8. 基于深度学习的图像语义分割技术概述之4常用方法
  9. py-rfcn算法caffe配置,训练及应用到自己的数据集
  10. 安装caffe碰到的坑