用PHP写一个-万年日历表

简介: 用PHP写一个-万年日历表

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

image.gif编辑

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

项目文件

image.gif编辑

项目代码

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"))); //上个月的现在这个时候
?>

image.gif

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>

image.gif

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

相关文章
|
区块链 算法 数据安全/隐私保护
带你读《区块链开发实战: 基于JavaScript的公链与DApp开发》之一:自己动手实现一个区块链系统
本书用三个部分讲解了区块链技术以及Asch的相关实践,第一部分讲解了区块链技术的基本概念,并用300行代码实现了一个最小的、可运行的区块链;第二部分分析Asch的源码,讲解Asch的实现原理;第三部分介绍了基于Asch的侧链技术的DApp开发实战。
|
4月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
4月前
|
传感器 人工智能 机器人
科技云报到:找到真场景,抓住真需求,这样的具身智能才是好AI
科技云报到:找到真场景,抓住真需求,这样的具身智能才是好AI
227 1
|
11月前
|
敏捷开发 Java 测试技术
为什么要单元测试
单元测试是软件开发中的重要环节,旨在验证程序模块的正确性。相比传统依赖人工检测的方式,自动化单元测试能显著提升效率与质量。在现代软件工程中,单元测试占据测试金字塔80%的基础地位,有助于快速定位问题、优化代码设计并提高整体研发效率。然而,忽视单元测试可能导致“冰激凌筒”或“沙漏”等反面模式,使系统难以维护。优秀的单元测试不仅保障代码质量,还能增强团队协作与持续交付能力,是构建高质量软件不可或缺的一部分。
305 1
|
物联网
MQTT常见问题之链接超时发送失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
机器学习/深度学习 人工智能 自然语言处理
2024通义语音AI技术图景,大模型引领AI再进化
2024通义语音AI技术图景,大模型引领AI再进化
|
SQL 数据库
`UPDATE FROM` 的语法以及常见的更新操作方式
`UPDATE FROM` 的语法以及常见的更新操作方式
3210 2
|
关系型数据库 MySQL API
MySQL上亿数据查询优化:实践与技巧
MySQL亿级数据查询优化涉及索引设计、分区表、查询语句优化和数据库架构调整。例如,通过为常用查询列创建索引、使用EXPLAIN分析查询计划、避免全表扫描和SELECT *,以及采用垂直拆分、水平拆分和读写分离来提升性能。分区表能减少查询数据量,API接口测试可验证优化效果。
995 0
|
人工智能 自然语言处理 搜索推荐
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
【2月更文挑战第30天】Dora AI是一个创新的生成式AI网站开发平台,让用户通过文本输入快速创建各类网站,无需模板,支持动态生成和个性化定制。平台提供直观的拖拽编辑,降低使用门槛,3分钟内即可生成网页。用户输入提示词或选择“Surprise Me”可获得不同风格的页面。尽管部分高级功能需会员,但基本编辑功能对所有用户开放。Dora AI正研发更多高级功能,如文本生成动画和3D网站,以提升用户体验。
621 2
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台

热门文章

最新文章