纯原生JS实现倒计时!

实现思路

目标时间 - 当前时间 = 剩余时间

当前时间

先计算当前时间用于显示证书打印日期,需要注意的是getMonth()的返回值需要加1才能得到实际的月份,因为它的索引值是从0到11。

另外getDate()和getDay()要注意区分,后者是返回一周中的第几天(0代表周日)。

js 复制代码
let current = new Date(); // 获取到当前中国标准时间
let year = current.getFullYear(); // 获取年份
let month = current.getMonth() + 1; // 获取月份
let date = current.getDate(); // 获取日份

可以再完善一下,给月份和日份加个判断,如果它们的长度为1就在前面加个0。

js 复制代码
  if (String(month).length === 1) {
    month = "0" + month;
  }
  if (String(date).length === 1) {
    date = "0" + date;
  }

剩余时间

首先计算出剩余时间的毫秒数,再将毫秒分别转换为天、小时、分钟和秒。

js 复制代码
let target = new Date("2023/10/16 21:45:32"); // 设置域名过期时间
let currentTime = current.getTime(); // 获取当前时间戳
let targetTime = target.getTime(); // 获取目标时间戳
let remainingTime = targetTime - currentTime; // 计算剩余时间戳

let days = Math.floor(remainingTime / (1000 * 60 * 60 * 24)); // 天
let hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); // 小时
let minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60)); // 分钟
let seconds = Math.floor((remainingTime % (1000 * 60)) / 1000); // 秒

出于美观考虑建议给它们前面都补个零,天数加不加都行。

js 复制代码
  if (String(hours).length === 1) {
    hours = "0" + hours;
  }
  if (String(minutes).length === 1) {
    minutes = "0" + minutes;
  }
  if (String(seconds).length === 1) {
    seconds = "0" + seconds;
  }

更新时间

封装一个updateCountdown()的函数,将以上代码包裹在内。

js 复制代码
function updateCountdown() {
...
}

开启setInterval计时器,设置每秒钟更新一次倒计时。

js 复制代码
let timer = setInterval(updateCountdown, 1000);

当剩余时间为0时清除定时器,一定要放到updateCountdown()里面才能更新倒计时。

js 复制代码
  if (remainingTime <= 0) {
    clearInterval(timer);
  }

最后,一个简单的倒计时就大功告成了!

相关推荐
幸运小猿8 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
速易达网络11 小时前
ECharts 图表制作完全指南:从零到可视化实战
前端·javascript·echarts
paopaokaka_luck11 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
kyriewen11 小时前
我验了 7 种 sticky 失效说法:3 种根本不成立
前端·javascript·程序员
我命由我1234513 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
Momo__14 小时前
你写的 import 重试,从来没生效过
前端·javascript·typescript
tryCbest14 小时前
Vue3——第 11 篇:组合式 API(上)——setup 与响应式 API 深度解析
前端·javascript·vue.js
tryCbest15 小时前
Vue3——第 13 篇:计算属性与侦听器——computed 与 watch 的进化
前端·javascript·vue.js
用户1179536547816 小时前
企业团队编程软件怎么选:AI编程工具的协作与落地能力对比
javascript
believed_breadfruit16 小时前
我开源了一个HTML 分页导出工具,解决了复杂页面的内容截断、跨页错乱和长文档白屏问题
前端·javascript·github