首先,给大家展示一下效果图。

功能包括:年份和月份查询,上一年、下一年、上一月、下一月和回到今天这几个功能。

项目文件

项目代码

1.php

<?php echo "<pre>";//设置时区//date_default_timezone_set('America/New_York');//1.获取时间戳var_dump(time());//2.格式化时间戳var_dump(date('Y-m-d H:i:s',time()));//3.将一个指定的日期时间转换为时间戳//var_dump(mktime('时','分','秒','月','日','年'));var_dump(mktime('10','30','59','12','30','2001'));//4.将一个字符串格式的日期,转换为时间戳var_dump(date('Y-m-d H:i:s',strtotime("+1day")));   //明天的现在这个时候var_dump(date('Y-m-d H:i:s',strtotime("-1day")));    //昨天的现在这个时候var_dump(date('Y-m-d H:i:s',strtotime("-1week")));   //上周的现在这个时候var_dump(date('Y-m-d H:i:s',strtotime("-1month")));  //上个月的现在这个时候var_dump(date('Y-m-d H:i:s',strtotime("-1year")));  //上个月的现在这个时候var_dump(date('Y-m-d H:i:s',strtotime("-1year +1month +2week +2day")));  //上个月的现在这个时候
?>

calendar_new.php

<!DOCTYPE html>
<html><head><title>万年历</title><meta charset="utf-8"/></head><body><?php //获取用户查询的年份和月份$year = isset($_GET['year'])==true ? $_GET['year'] : date('Y');$month = isset($_GET['month'])==true ? $_GET['month'] : date('m');//只对$_GET有效// $year = $_GET['year'] ?? date('Y');// $month = $_GET['month'] ?? date('m');$new_year = date('Y',time());// echo $new_year;$new_month = date('m',time());// echo $new_month;$new_days = date('d',time());//获取当前月第一天的时间戳$time = mktime(0,0,0,$month,1,$year);//1.首先,获取万年历前方的空格$first = date('N',$time)-1;    //0//2.然后,获得当前月的天数$days = date('t',$time);    //30//3.最后,求得万年历后方的空格$last = 42-$first-$days    //12?><center><h2>万年历</h2><h3><?= $year ?> 年 <?= $month ?> 月</h3><form action="./calendar_new.php" method="get">年份:<select name='year'><?php for($y=1970; $y<=2100; $y++){if($y==$year){echo "<option selected value='{$y}'>{$y} 年</option>";}else{echo "<option value='{$y}'>{$y} 年</option>";}}?></select>月份:<select name='month'><?php for($m=1; $m<=12; $m++){if($m==$month){?><option selected value="<?= $m ?>"><?= $m ?> 月</option><?php}else{?><option value="<?= $m ?>"><?= $m ?> 月</option><?php }}?></select><input type="submit" value="查询"/></form><br/><table border='1' width='800' cellspacing='0' cellpadding='5'><tr><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th><th>日</th></tr><tr align='center'><?php //定义一个统计单元格个数的空变量$num = 0;$new_days = date('d',time());//1.循环表格中前方的空格for($i=1; $i<=$first; $i++){echo "<td>&nbsp;</td>";++$num;//判断单元格是否到达7的倍数if($num%7==0){echo "</tr><tr align='center'>";}}//2.循环表格中中间的日期for($j=1; $j<=$days; $j++){// echo $year;// echo $month;if(($j==$new_days) && ($year==$new_year) && ($month==$new_month) ){echo "<td><font color=red>{$j}</font></td>";++$num;}else{echo "<td>{$j}</td>";++$num;}//判断单元格是否到达7的倍数if($num%7==0){echo "</tr><tr align='center'>";}}//3.循环表格最后的空格for($k=1; $k<=$last; $k++){echo "<td>&nbsp;</td>";++$num;//判断单元格是否到达7的倍数if($num%7==0){echo "</tr><tr align='center'>";}}?></tr></table><br/><a href="./calendar_new.php?year=<?= $year-1 ?>&month=<?= $month ?>">上一年</a><a href="./calendar_new.php?year=<?= $prevy ?>&month=<?= $prevm ?>">上一月</a><a href="./calendar_new.php">回到今天</a><a href="./calendar_new.php?year=<?= $nexty ?>&month=<?= $nextm ?>">下一月</a><a href="./calendar_new.php?year=<?= $year+1 ?>&month=<?= $month ?>">下一年</a></center></body>
</html>

大家可以直接复制代码,放到对应的文件名里就可以运行。适合初学php的人学习使用。

用PHP写一个-万年日历表相关推荐

  1. 用Java写的一个万年日历

    用Java写的一个万年日历 当我们学过分支结构语句和循环语句后,我们可以简单的完成一个小案例: 通过输入具体的年月日,输出此年此月此日为星期几,并打印此月日历. 说一下我的思路: 首先第一步,先实现输 ...

  2. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  3. 用python给自己写一个加密算法

    前言 我们经常在写程序的过程中需要给自己写一些敏感的信息,比如密码,那么我们如何给自己的密码加密呢?现在我们自己来给自己写一个加密和解密的程序 程序 # coding:utf-8# !/usr/bin ...

  4. 写一个通用数据访问组件

    出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(n ...

  5. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

    本文上接用JDBC写一个学生管理系统(添加.删除.修改.查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询. 我们先要定义一个接口IRowMapper: ...

  6. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

    首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网 ...

  7. 不用任何第三方,写一个RTMP直播推流器

    2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知 ...

  8. 使用Node.js写一个简单的api接口

    引入Http模块 默认你已经安装了Node.js Node当中内置了Http模块: 可以使用 var http= require("http"); 复制代码 引入http模块: H ...

  9. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

最新文章

  1. 关于rtsp的时间戳问题
  2. java 毫秒转时间字符串_java 时间字符串 转换 毫秒
  3. java反序列化weblogic_[Todo]Java反序列化-weblogic
  4. Transaction中的SQL死锁
  5. SAP HANA学习笔记
  6. eb8000软件怎样上传_百度网盘如何免费上传超过4G的文件?BitComet来帮你!
  7. 分享网页加载速度优化的一些技巧?
  8. java 手机网站 cookie操作_java操作cookie问题
  9. 【HTML+CSS网页设计与布局 从入门到精通】第15章-表格格式:边距/居中/边框/折叠
  10. Ansible Synopsis
  11. LoadRunner 11 error:Cannot initialize driver dll
  12. 图的存储结构之邻接表(详解)
  13. 人工智能平台 H2O.ai
  14. php自定义类生成lib,thinkphp引入自定义封装类
  15. Web---session技术代码演示(request,session,servletContext)
  16. GridView 中取值的方法汇总
  17. 【第43题】【062题库】2019年OCP认证062考试新题
  18. [无视][mark]退役记
  19. Python 防止反编译
  20. svnadmin load 遇到E125005 的错误

热门文章

  1. 《C++沉思录》读书笔记
  2. android app换肤Android-skin-support的简单使用
  3. 传智播客网站.html
  4. PDF怎么转换成Word?将PDF转换为Word的三种方法!
  5. 解密电商的11张基金支付牌照:BAT领衔
  6. 最完整版iOS资源大全中文版
  7. iOS 简单易用的跳转方式
  8. 千呼万唤始出来,MySQL 8.0索引三剑客之函数索引
  9. 使用WPF+MVVM模式的小案例
  10. php表单文字乱码,php汉字乱码