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

JavaScript倒计时项目中targetdate返回NaN的原因排查

问题原因分析

targetdate 返回 NaN 的核心原因是 Date.parse() 对 dd/mm/yyyy 格式的解析不兼容且不符合预期:

ECMAScript 标准规定,使用 / 分隔的日期字符串默认遵循美式日期格式(mm/dd/yyyy),而非你期望的欧式格式。当输入的日(dd)数值大于12时(比如 31/05/2025),浏览器会尝试将 31 当作月份解析,这显然超出了月份的合法范围(1-12),直接导致解析失败返回 NaN,最终 targetdate 也变成 NaN。

即使输入的日小于等于12,也会出现逻辑错误:比如输入 05/01/2025(本意是1月5日),浏览器会解析成5月1日,完全不符合需求。

解决方案

推荐两种可靠的修复方式:

方式1:直接使用Date构造函数参数(最稳妥)

手动拆分日、月、年,传入Date构造函数(注意:Date的月份参数是0-11,所以要把输入的月份减1):

// 替换原来的targetdate赋值代码
let targetdate = new Date(yyyy, mm - 1, dd).getTime();

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

将dd/mm/yyyy转换为所有浏览器都能正确解析的ISO格式yyyy-mm-dd:

const targetISO = `${yyyy}-${mm}-${dd}`;
let targetdate = new Date(targetISO).getTime();
额外建议

为避免用户输入非法日期(比如30/02/2025、13/13/2025)导致异常,可添加简单的输入验证:

// 验证月份和日期合法性
const monthNum = parseInt(mm);
const dayNum = parseInt(dd);
const yearNum = parseInt(yyyy);

if (monthNum < 1 || monthNum > 12) {
  alert("请输入1-12之间的月份");
  return;
}

const maxDay = new Date(yearNum, monthNum, 0).getDate(); // 获取当月最大天数
if (dayNum < 1 || dayNum > maxDay) {
  alert(`该月份最大天数为${maxDay},请输入合法日期`);
  return;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:02:54