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

从HTML获取Datetime实现倒计时器时持续出现NaN问题求助

解决倒计时器显示NaN的问题

问题原因

你的代码里new Date(enddateTime)无法正确解析30.11.2022 08:50:00这种dd.mm.yyyy hh:mm:ss格式的字符串,返回的是Invalid Date,调用getTime()后得到NaN,导致后续所有时间计算结果都是NaN。

解决方法

需要手动将日期字符串转换成JavaScript Date构造函数能识别的格式,有两种常用方式:

方式1:拆分日期组件构造Date对象

直接拆分日、月、年、时、分、秒,注意月份是从0开始计数(11月对应10),然后传入Date构造函数:

var enddateTime = document.getElementById('datetime').textContent;
// 拆分日期字符串,按.、空格、:分割
var dateParts = enddateTime.split(/[ .:]/);
// 构造Date对象:年, 月(减1), 日, 时, 分, 秒
var countDownDate = new Date(
  dateParts[2], 
  dateParts[1] - 1, 
  dateParts[0], 
  dateParts[3], 
  dateParts[4], 
  dateParts[5]
).getTime();

方式2:转换为ISO标准格式

将dd.mm.yyyy替换为yyyy-mm-dd,这是Date能直接解析的ISO格式:

var enddateTime = document.getElementById('datetime').textContent;
// 替换日期格式为yyyy-mm-dd
var formattedDate = enddateTime.replace(/(\d{2})\.(\d{2})\.(\d{4})/, '$3-$2-$1');
var countDownDate = new Date(formattedDate).getTime();

修改后的完整代码

<span id="datetime">30.11.2022 08:50:00</span>
<p id="demo"></p>

<script>
var enddateTime = document.getElementById('datetime').textContent;
// 转换日期格式并生成时间戳
var formattedDate = enddateTime.replace(/(\d{2})\.(\d{2})\.(\d{4})/, '$3-$2-$1');
var countDownDate = new Date(formattedDate).getTime();

// Update the count down every 1 second
var x = setInterval(function() {

  // Get today's date and time
  var now = new Date().getTime();

  // Find the distance between now and the count down date
  var distance = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";

  // If the count down is finished, write some text 
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:05:24