一、设置时区

首先设置我们的时区,一个日历的制作肯定要有时间的嘛

如下:

date_default_timezone_set("PRC"); //设置时区

这段代码中PRC是中国的意思,这段代码是把 默认时区设置成了中国标准时间

二、以表格形式输出日历

        echo "<style>table{margin:0 auto}td{border:1px solid black}</style>";$w_arr=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");echo "<table><tr>";for($i=0;$i<count($w_arr);$i++){echo "<td>$w_arr[$i]</td>";}

输出结果:

先输出表格样式,让后创建一个名为 $w_arr 的星期数组,在用 for循环 输出表格。

为什么星期日会在第一个格子呢?因为我们要用 date()函数 获取某天是星期几,用到的是这个函数里面的 “w",date("w") 又表示星期几的数字,如:星期日是0,星期六是6......

然后这个月的第一天就会从那个星期几开始。


然后定义一下我们的 年 月 日~

        $year = date("Y"); //本年度的年份 Y 为年份的四位数表达$month = date("m"); //本月的月份 m 月份的数字表示 (01~12)$day = date("j"); //获取当天的天数 j 为不带前导零 如:(1~12) 为了日历美观

让后获取这个月第一天是星期几

$fday = date("w", mktime(0, 0, 0, $month, 1, $year)); 

结果:

因为我们获取的date("Y”);、date("m");是本年本月份的,然后现在是4月份,我们输出了一下这个

$fday的值显示为 “ 5 (星期五) “,而这段代码的解释呢就是:

先用 mktime() 获取 今年现在这个月份一号的时间戳,当然这个$month和$year中间的 ”1“ 也可以去掉,因为它本来就是获取这个月份第一天是星期几,但这里为了严谨一点,然后用 date("w"); 将这个月份第一天转换成星期几的数字形式。

$num = $fday + date("t", mktime(0, 0, 0, $month, 1, $year)); //计算星期几加上当月的天数 共需要多少个格子

然后定义一个变量来计一共需要多少个表格,为什么呢?如下图所示

这下就简单明了了,上面用的获取第一天为星期几就排上用场了,$fday计的值为5,然后可以理解为就有五个空格子,如果大于等于这个第一天的值的时候开始输出日期:

for ($i = 0; $i < $num; $i++){$date = $i+1;//设置输出的日期变量//输出所有的格子,最大格子数为$num;if ($i % 7 == 0) {echo "<tr>"; //加个判断,日历的一行有7个格子}echo "<td>";//然后输出格子if ($i >= $wd) { //这里开始判断,日历第一天的开始if ($date == $day && $month == date("n") && $year == date("Y")) {//如果恰好是系统当天的日期则将当天日期设置为红色并加粗echo "<b><font color='orange'>" . $day . "</font></b>";} else {echo $date; //输出日期}echo "</td>";//如果以上都没有就是空格子
}

但是发现结果是这样的:

它的第一天是从6开始的,这是为什么呢?

于是乎开始苦逼的寻找bug了 T_T

然后发现了问题所在!!!

因为for循环里面的$date = $i+1;随着 i++ 它 $date 的值会不断自增,到了符合if ($i >= $fday)的时候开始输出,此时的 $date 是大于这个 if 判断语句的,但他的值却不再是 1 ,然后这里应该是忘记前面要减去的五个空格 ,于是修改了这段代码:$date = $i+1-$fday; 然后这个小bug被解决了!

最后放上完整的php日历代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><?phpecho "<style>table{margin:0 auto}td{border:1px solid black}</style>";$w_arr = array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");echo "<table><tr>";for ($i = 0; $i < count($w_arr); $i++) {echo "<td>$w_arr[$i]</td>";}echo "</td>";$year = date("Y"); //本年度的年份 Y 为年份的四位数表达$month = date("m"); //本月的月份 m 月份的数字表示 (01~12)$day = date("j"); //获取当天的天数 j 为不带前导零 如:(1~12) 为了日历美观$fday = date("w", mktime(0, 0, 0, $month, 1, $year)); //获取第一天是星期几$num = $fday + date("t", mktime(0, 0, 0, $month, 1, $year)); //计算星期几加上当月的天数 共需要多少个格子for ($i = 0; $i < $num; $i++) {$date = $i + 1 - $fday;if ($i % 7 == 0) {echo "<tr align=center>"; //一行的开始}echo "<td>";if ($i >= $fday) {if ($date == $day && $month == date("n") && $year == date("Y")) {//如果恰好是系统当天的日期则将当天日期设置为红色并加粗echo "<b><font color='orange'>" . $day . "</font></b>";} else {echo $date; //输出日期}echo "</td>";}}?>
</body></html>

总结

菜要多练......

【长达x年半个人PHP练习生之——日历制作】相关推荐

  1. 【长达x年半个人Javascript练习生之——动态控制表格生成】

    一.思路 定义一个变量存储住表格标签,用for循环来控制行.列表格的输出,用input标签接收输入的行数和列数,最后用inner HTML显示出我们的表格. 二.操作 < < < H ...

  2. 以前看过一个压缩过的.exe,运行会播放长达半小时的动画,却只有60KB,个人认为其中的原理...

    以前看过一个压缩过的.exe,运行会播放长达半小时的动画,而不重复,文件大小却只有60KB,个人认为其中的原理 1.主原理:该动画必是根据规则(即公式)生成的 2.启动时,根据公式,在内存生成数据表 ...

  3. 长达1500年之久的争论:意识是连续的还是离散的?心理物理学家给出了新的回答...

    来源:brainnews 两种主要理论推动了由Saint Augustine发起的长达1500年之久的争论:意识是连续的(即我们在每一个时间点都有意识),还是离散的(即我们只在特定的时刻有意识)? 9 ...

  4. 新一轮涨价潮来袭!英飞凌、安森美、ST、安世等交期长达52周

    2021年,在上游原材料涨价,晶圆和封测产能紧张且供不应求的情况下,包括英飞凌.安森美.DIODES.恩智浦.士兰微.华润微.新洁能.富满电子在内的功率半导体企业纷纷调涨旗下产品价格. 01 英飞凌. ...

  5. 这篇长达165页的论文,用一个里程碑式的证明同时解决了量子物理学和理论数学的难题...

    来源:机器之心 计算机科学.数学.物理学,这三个学科各自的一些重大难题在近日发布的一篇标题简洁的论文<MIP*=RE>中同时得到了解答.在该论文中,五位计算机科学家为可通过计算方式验证的知 ...

  6. TNFBA治疗极早期中轴型nrSpA随机双盲试验后长达6年的放射学随访

    原文 译文 OP0180 LONG TERM RESULTS OF A REMISSION INDUCTION APPROACH TO EARLY AXIAL SPONDYLOARTHRITIS Z. ...

  7. python发朋友圈突破朋友圈限制_突破限制!原来朋友圈可以发长达5分钟的视频,后悔没早点知道...

    原标题:突破限制!原来朋友圈可以发长达5分钟的视频,后悔没早点知道 现在使用微信的人越来越多,很多人喜欢在微信朋友圈分享自己的生活,可能是发图片,也可能是发日常的视频,但是视频有限制怎么办? 一.朋友 ...

  8. 遭七旬叔公欺负长达八年 17岁女孩怀孕5个月

    遭七旬叔公欺负长达八年 17岁女孩怀孕5个月 2010年09月28日08:15早报林加华 周长锋 庄丽祥我要评论(454) 字号:T|T 洪群秀肚子已经慢慢大起来 禽兽"叔公"就住 ...

  9. 比网易更狠!华为13年工龄员工离职被诉敲诈,羁押长达251天

    来源:市界,作者:何珊珊,编辑:朗明 网易员工被"暴力"离职事件刚过,华为又曝出员工离职被公司起诉敲诈勒索,并被羁押长达251天. 11月29日,一份关于华为离职员工李洪元裁决书被 ...

最新文章

  1. 用Linux构建高效FTP服务器(2)
  2. 架构师之路 — 部署架构 — 集群部署
  3. 【django】解决关于RuntimeError: ‘cryptography‘ package is required for sha256_password or caching...问题
  4. 无法创建文件系统以及无法创建PV时怎么办?
  5. 如何用shell脚本编译java工程
  6. (10) Hibernate懒加载详解
  7. 信息学奥赛一本通 2017:【例4.2】输出偶数
  8. 来了!华为首款5G双模手机Mate 20 X (5G)发布:这个价格香吗?
  9. 2021-2025年中国制冷机行业市场供需与战略研究报告
  10. python基础编码规范_Python基础:编码规范(4)
  11. Git学习笔记(2)——版本的回退,和暂存区的理解
  12. 宝尚简讯-短期震荡在蓄势
  13. Android游戏破解 入门级零基础起步学习破解!MT管理器+修改器使用方法 小白看了绝对有用
  14. three.js 场景编辑器 源码解析(六)
  15. 11.自媒体功能补全
  16. 股票量化分析工具QTYX使用攻略——RPS指标选取强势股(更新2.6.3)
  17. 免费微信批量公众号采集文章方法
  18. 大学生月入过万的创业好项目——自媒体
  19. GUVV-T20GD-U 太阳光紫外线传感器TO-39U韩国GENICOM光电二极管杀菌灯监控
  20. linux系统打补丁

热门文章

  1. canon相机镜头协议数据用python进行格式化
  2. idea跳到下一个断点_不看会后悔系列之idea的使用小技巧
  3. 机器学习 + NFT,跨界联合可以擦出什么火花?
  4. fibnacci serch sample
  5. 算力和硬件的关系_硬件算力需求飙升,为什么软件生意越来越火?
  6. android 12.0去掉recovery模式UI页面的选项
  7. 基于JAVA的便利店超市管理系统【数据库设计、论文、源码、开题报告】
  8. 《对话》:求解“精英思想”与“企业实践”的统一
  9. CS231n:图像分类
  10. 获取安卓设备唯一ID