JS调用getTime()方法报错:.getTime不是函数,基于HTML日期输入求解决
问题排查与解决方案
核心问题
你在日期输入框的change事件回调中,用var声明的lastMenDate和targetDate是局部变量,仅能在各自的回调函数内部访问。当点击calc按钮时,代码里的lastMenDate和targetDate是未定义的全局变量,并非你之前创建的Date实例,所以调用.getTime()会抛出"is not a function"错误。
修复方案
将lastMenDate和targetDate的声明提升到全局作用域,让所有事件回调都能共享这两个变量。同时建议增加日期有效性校验,避免未选择日期就触发计算的情况。
修改后的完整代码
// 全局声明变量,供所有回调函数共享 let lastMenDate; let targetDate; document.getElementById("lastMenDate").addEventListener("change", function () { const inputMen = this.value; lastMenDate = new Date(inputMen); console.log(lastMenDate); }); document.getElementById("targetDate").addEventListener("change", function () { const inputTar = this.value; targetDate = new Date(inputTar); console.log(targetDate); }); document.getElementById("calc").addEventListener("click", function () { // 校验日期是否有效 if (!lastMenDate || !targetDate || isNaN(lastMenDate.getTime()) || isNaN(targetDate.getTime())) { console.log("请选择有效的日期"); return; } const timeDifference = targetDate.getTime() - lastMenDate.getTime(); const daysDifference = timeDifference / (1000 * 24 * 60 * 60); console.log(daysDifference); });
额外说明
- HTML原生日期输入框返回的是标准ISO格式字符串(
YYYY-MM-DD),new Date()可以直接正确解析,无需额外处理格式。 - 使用
let替代var是更现代的变量声明方式,避免变量提升带来的潜在问题。
内容的提问来源于stack exchange,提问作者Jáchym Plánička
相关产品推荐
相关产品推荐

