You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript新年倒计时逻辑正常但无法在网页显示问题

问题根因

两个核心错误导致时间无法渲染到页面:

  • DOM选择器写法完全错误:HTML中承载时间数值的<h2>元素使用id属性标记(id="days"/id="hours"等),但JS中写的document.querySelectorAll('days')是匹配<days>类型的标签节点,根本无法选中目标元素;且querySelectorAll返回的是节点集合,直接对集合设置innerHTML不会对集合内的元素生效。
  • 目标时间硬编码为2023年1月1日,当前时间已经超过该时间点,计算出的时间差为负值,即使选中元素也无法得到正确的倒计时结果。
修复步骤
  1. 修正DOM获取逻辑,使用匹配id的选择方法直接拿到单个元素:
const days        = document.getElementById('days')
const hours       = document.getElementById('hours')
const minutes     = document.getElementById('minutes')
const seconds     = document.getElementById('seconds')
  1. 把硬编码的目标时间改为动态计算,自动取下一年的元旦时间点,避免年份过期失效:
const currentYear = new Date().getFullYear();
const newYearTime = new Date(`January 1 ${currentYear + 1} 00:00:00`);
  1. 额外优化:在定时器启动前先执行一次更新函数,避免页面加载后第一秒出现空白。
修正后可直接运行的JS代码
const days        = document.getElementById('days')
const hours       = document.getElementById('hours')
const minutes     = document.getElementById('minutes')
const seconds     = document.getElementById('seconds')
const currentYear = new Date().getFullYear();
const newYearTime = new Date(`January 1 ${currentYear + 1} 00:00:00`);

function updateCountdown() {
  const currentTime = new Date();
  const diff = newYearTime - currentTime;

  const d = Math.floor(diff / 1000 / 60 / 60 / 24);
  const h = Math.floor(diff / 1000 / 60 / 60) % 24;
  const m = Math.floor(diff / 1000 / 60) % 60;
  const s = Math.floor(diff / 1000) % 60;

  days.innerHTML    = d;
  hours.innerHTML   = h < 10 ? '0' + h : h;
  minutes.innerHTML = m < 10 ? '0' + m : m;
  seconds.innerHTML = s < 10 ? '0' + s : s;
}

// 首屏立刻渲染
updateCountdown();
setInterval(updateCountdown, 1000);

现有HTML结构和CSS样式无需修改,替换JS代码后即可正常展示倒计时。

内容的提问来源于stack exchange,提问作者user19355820

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:57:07