【JavaScript】内置对象 - Date 日期对象 ④ ( 制作倒计时页面 )

文章目录

  • 一、倒计时页面实现
    • 1、需求分析
    • 2、计算秒数
    • 3、计算倒计时时间的 天 / 时 / 分 / 秒
    • 4、页面中显示倒计时时间
  • 二、完整代码示例
    • 1、完整代码
    • 2、执行结果


Date 日期对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date


在这里插入图片描述





一、倒计时页面实现




1、需求分析


给定一个固定的时间 , 如 2024 年 5 月 8 日 0 时 0 分 0 秒 作为终止时间 ;

倒计时 显示 的是 剩余时间 ;

使用 终止时间 减去 当前时间 , 就是要显示的 剩余时间 ;

上述的 时间 , 都要使用 时间戳进行计算 ;


最终 将 要显示的 剩余时间 通过计算 转为 时分秒 数值 ;

  • 毫秒时间戳 转为 秒 只需要 除以 1000 即可 , 得到一个 秒数 ;
  • 秒数 直接 模 60 就是 秒时间 ;
  • 秒数 除以 60 得到的是 分数 , 模 60 得到的是 分时间 ;
  • 分数 除以 60 得到的是 小时数 , 模 24 得到的是 小时时间 ;
  • 小时数 除以 24 得到的是 天数 ;

2、计算秒数


给定一个结束时间的字符串 , 并使用 +new Date 的方式 , 获取该时间字符串对应的 Date 对象的 时间戳 ;

使用 +new Date() 可以获取当前的时间戳 ;

上述两个时间戳 都是 毫秒时间戳 ;

二者相减 , 得到的是 毫秒时间 , 需要再除以 1000 , (endTimeStamp - nowTimeStamp) / 1000 , 就可以得到倒计时秒数 ;


代码示例 :

            var timeStr = '2024-05-09 11:11:11';

            // 获取当前时间戳
            var nowTimeStamp = +new Date();

            // 获取结束时间戳
            var endTimeStamp = +new Date(timeStr);

			// 获取剩余的秒数
            var seconds = (endTimeStamp - nowTimeStamp) / 1000;

3、计算倒计时时间的 天 / 时 / 分 / 秒


总秒数 模 60 , 就是 时间对应的 秒 , seconds % 60 ;

使用三目运算符 , 令 秒时间 始终保证是 两位数显示 , 如果小于 10 , 则在前面补 0 , second < 10 ? '0' + second : second ;


总秒数 除以 60 得到 总分钟数 , 一分钟 60 秒 , 再 模 60 , 得到的就是 时间分钟 , seconds / 60 % 60 ;

使用三目运算符 , 令 分时间 始终保证是 两位数显示 , 如果小于 10 , 则在前面补 0 , minute < 10 ? '0' + minute : minute ;


总秒数 除以 60 得到 总分钟数 , 再除以 60 得到总小时数 , 一天 24 小时 , 再模 24 , 得到的就是 时间小时 , seconds / 60 / 60 % 24 ;

使用三目运算符 , 令 小时时间 始终保证是 两位数显示 , 如果小于 10 , 则在前面补 0 , hour < 10 ? '0' + hour : hour ;


总秒数 除以 60 得到 总分钟数 , 再除以 60 得到总小时数 , 再除以 24 , 得到的就是 天时间 , seconds / 60 / 60 / 24 ;

使用三目运算符 , 令 天时间 始终保证是 两位数显示 , 如果小于 10 , 则在前面补 0 , day < 10 ? '0' + day : day ;


代码示例 :

            // 计算剩余时间的 天 时 分 秒 时间

            // 秒
            var second = parseInt(seconds % 60);
            // 保证秒是两位数的
            second = second < 10 ? '0' + second : second;

            // 分
            var minute = parseInt(seconds / 60 % 60);
            // 保证分是两位数的
            minute = minute < 10 ? '0' + minute : minute;

            // 时
            var hour = parseInt(seconds / 60 / 60 % 24);
            // 保证时是两位数的
            hour = hour < 10 ? '0' + hour : hour;

            // 天
            var day = parseInt(seconds / 60 / 60 / 24);
            // 保证天是两位数的
            day = day < 10 ? '0' + day : day;

4、页面中显示倒计时时间


在 body 标签中设置一个 HTML 标签 , 显示时间 ;

<body>
    <h1 id="countdown"></h1>
</body>

调用 document.getElementById 函数 , 获取 HTML 标签元素 , 为其设置倒计时文本 ;

            // 将倒计时设置到页面中
            document.getElementById("countdown").innerHTML = day + " 天 " + hour + " 时 " + minute + " 分 " + second + " 秒";     

最终效果如下 :
在这里插入图片描述





二、完整代码示例




1、完整代码


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 设置 meta 视口标签 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JavaScript</title>
    <style></style>
    <script>
        // Date 内置对象

        // 倒计时方法 , 之后每隔 1 秒调用一次
        function countDown() {
            var timeStr = '2024-05-09 11:11:11';

            // 获取当前时间戳
            var nowTimeStamp = +new Date();

            // 获取结束时间戳
            var endTimeStamp = +new Date(timeStr);

            // 获取剩余的秒数
            var seconds = (endTimeStamp - nowTimeStamp) / 1000;

            // 计算剩余时间的 天 时 分 秒 时间

            // 秒
            var second = parseInt(seconds % 60);
            // 保证秒是两位数的
            second = second < 10 ? '0' + second : second;

            // 分
            var minute = parseInt(seconds / 60 % 60);
            // 保证分是两位数的
            minute = minute < 10 ? '0' + minute : minute;

            // 时
            var hour = parseInt(seconds / 60 / 60 % 24);
            // 保证时是两位数的
            hour = hour < 10 ? '0' + hour : hour;

            // 天
            var day = parseInt(seconds / 60 / 60 / 24);
            // 保证天是两位数的
            day = day < 10 ? '0' + day : day;

            // 将倒计时设置到页面中
            document.getElementById("countdown").innerHTML = day + " 天 " + hour + " 时 " + minute + " 分 " + second + " 秒";
        }

        setInterval(countDown, 1000);
    </script>
</head>

<body>
    <h1 id="countdown"></h1>
</body>

</html>

2、执行结果


在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/605299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北京大学肖臻老师《区块链技术与应用》P16(状态树)和P17(交易树和收据树)

1️⃣ 参考 北京大学肖臻老师《区块链技术与应用》 P16 - ETH状态树篇P17 - ETH交易树和收据树篇 部分文字和图片 北京大学肖臻老师《区块链技术与应用》公开课笔记18——ETH数据结构篇2(状态树2)北京大学肖臻老师《区块链技术与应用》公开课笔记19——ETH数据结构篇3(交易树和…

入门视频剪辑:视频合并不再难,批量嵌套合并的简单步骤

在数字媒体时代&#xff0c;视频剪辑已成为一项基本技能。无论是制作家庭电影、公司宣传片还是在线教育内容&#xff0c;视频剪辑都扮演着重要角色。对于初学者来说&#xff0c;视频剪辑可能看起来有些复杂&#xff0c;但掌握了正确的步骤和技巧后&#xff0c;你会发现它其实并…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中&#xff0c;路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用&#xff08;SPA&#xff0…

十九、分布式数据库MyCat

目录 一、概述 1、MyCat是什么&#xff1f; 2、原理&#xff1a; 3、能干什么 1、读写分离 2、数据分片 3、多数据源整合 4、Mycat监控 4、安装部署 1、环境准备 2、安装 3、Mycat配置详解 1、server.xml user 标签 2、schema.xml schema标签&#xff1a; table标签&…

实践遥感卫星场景海洋船只检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建卫星遥感场景下海洋海面船只检测识别系统

遥感相关的实践在我们前面的系列博文中也有相关的一些实践&#xff0c;胡药师基于MASTAR数据集开发构建对应的目标检测系统在前文也有一些介绍&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于YOLOv7开发构建MSTAR雷达影像目标检测系统》 《基于yolov5n的轻量…

多角度解析动态住宅IP的多元化应用

动态住宅IP指的是在住宅网络中使用的、能够随时间或用户需求配置的IP地址&#xff0c;能够根据网络状况自动调整&#xff0c;为用户提供更加灵活、高效的上网体验。这种IP地址不是固定不变的&#xff0c;而是会定期自动更换&#xff0c;这种IP地址也让使用者的安全得以保障。 作…

【牛客】【模板】前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和&#xff1a;pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和&#xff1a;pre[r]-pre[l-1] 3.…

247 基于matlab的梁的振型仿真

基于matlab的梁的振型仿真。利用有限元理论&#xff0c;求二维梁的固有频率和振型。短边固定&#xff0c;给定长度、横截面积&#xff0c;弹性模量及材料密度已知。并对比理论计算结果进行分析。各参数自己设定。程序已调通&#xff0c;可直接运行。 247 梁的振型仿真 固有频率…

顶级SCI优化!24年新算法冠豪猪算法CPO优化无人机集群三维路径规划!先用先发!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 结果展示 原理讲解 一、路径长度成本 F1 …

【Linux】Linux——Centos7安装RabbitMQ

目录 安装包准备socaterlang 安装rabbitmq安装命令启动rabbitmq&#xff0c;两种方式查看rabbitmq 启动后的情况配置并开启网页插件关闭防火墙或开放端口测试登录问题配置web端访问账号密码和权限添加用户&#xff0c;后面两个参数分别是用户名和密码.添加权限修改用户角色再次…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后&#xff0c;使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig&#xff0c;错误&#xff1a;。 就输入yum search ifconfig匹配安装包程序 yum searc…

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移 一、软件环境 操作系统:windows 11 pg免安装版数据库:postgresql-12.17-1-windows-x64-binaries.zip 下载地址:https://get.enterprisedb.com/postgresql/postgresql-12.18-1-windows-x64-bina…

《构建高效审批系统:架构设计与实践》

在现代企业管理中&#xff0c;审批系统扮演着至关重要的角色&#xff0c;它不仅能够规范业务流程&#xff0c;提高工作效率&#xff0c;还能够增强企业的管理控制力和信息化水平。本文将探讨如何设计和构建一套高效的审批系统架构&#xff0c;以满足企业日常审批需求&#xff0…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09; 目录 Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09;API 风格选项式API组合式API混合式 事件监听…

并发问题系统学习(更新中)

进程、线程 进程&#xff1a;进程是代码在数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位。可以理解为一个java应用。 线程&#xff1a;线程是进程的一个执行路径&#xff0c;一个进程中至少有一个线程&#xff0c;进程中的多个线程共享进程的资源。…

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题&#xff0c;经常出现这样的问题&#xff0c;刚重启系统时不报错了&#xff0c;可是运行一段时间又会出现。sql已经写了limit 1&#xff0c;mybatis的debug日志也返回total为1&#xff0c;可是却报错返回了1805条数据 乍一看&#xff0c;感觉太不…

Elasticsearch的基本使用

Elasticsearch的基本使用 1.基本概念1.1 文档和字段1.2 索引和映射1.3 mysql与elasticsearch对比 2.索引库2.1 es中mapping映射属性2.2.es中索引库的增删改查 3.文档3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.4.1 全量修改3.4.2 增量修改3.5 总结 4.DSL查询语法4.1 D…

Redis如何保证数据一致性?

Redis如何保证数据一致性&#xff1f; Redis通常作为持久层数据库&#xff08;例如MySQL&#xff09;的缓存层&#xff0c;如果缓存或者数据库数据发生改变&#xff0c;如何保证双方的数据是一致的&#xff1f; 这其实是要分情况讨论滴&#xff0c;对数据一致性不同的要求有不…

08.图形化界面字体问题处理

图形化界面字体问题处理 发现图形存在乱码&#xff0c;不显示文字 zabbix服务器的字符集所在的路径下&#xff1a; /usr/share/zabbix/assets/fonts 将本地windows系统的字体进行上传&#xff0c;选择一个自己喜欢的字体 上传到系统路径下并且直接覆盖掉 回到web浏览器界面…

什么是Facebook付费广告营销?

Facebook作为全球最大的社交平台之一&#xff0c;成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数&#xff0c;还提供了丰富的广告工具和社群互动功能&#xff0c;让商家能够精准触达目标市场&#xff0c;提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…