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

JS日期计算返回NaN问题:可选结束日期设为当前日期的代码修复

日期计算代码返回NaN的问题修复

问题根源

  1. 输入值获取错误
    日期输入框的用户输入内容存在value属性中,你用innerHTML读取的是元素内部的HTML内容,而非用户输入,这会导致startDate或endDate成为无效日期对象。

  2. 函数逻辑无效
    你定义了end函数但从未执行,且函数内部没有返回任何值。直接将函数传入new Date()会生成无效日期,因为new Date(函数)会把函数转为字符串,不属于合法日期格式。

  3. 变量与判断逻辑错误
    else分支里的endOutput是未声明的变量,会触发报错;判断结束日期是否为空时,应该检查空字符串(endInput.trim() === ''),而非== null——输入框未填写时默认是空字符串,不是null。

修正后的代码

// 获取输入框的用户输入值
const startInput = document.querySelector(".exp_start").value;
let endInput = document.querySelector(".exp_end").value;

// 处理结束日期:为空则使用当前日期
const endDate = endInput.trim() === '' ? new Date() : new Date(endInput);
const startDate = new Date(startInput);

// 检查日期是否有效,避免NaN
if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
    document.querySelector(".exp_years").innerHTML = "无效日期";
    return;
}

// 计算时间差并转换为年份
const timeDiff = Math.abs(endDate - startDate);
// 按平均年数365.25天计算,比30.5*12更准确
const years = (timeDiff / (1000 * 60 * 60 * 24 * 365.25)).toFixed(1);

document.querySelector(".exp_years").innerHTML = years;

关键修正说明

  • 改用value属性获取输入框的用户输入内容
  • 用三元表达式简化结束日期的判断逻辑,去掉冗余函数
  • 添加日期有效性检查,提前拦截无效输入导致的NaN
  • 调整年份计算方式为按平均年数365.25天,结果更准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:38