给日期添加天数时触发Uncaught TypeError: getDate is not a function错误
解决"Uncaught TypeError: dt_cl.getDate is not a function"错误
嘿,这个问题我一眼就揪出问题所在啦!你出错的核心原因特别明确:你把一个字符串当成了Date对象来调用日期方法。
咱们拆解下你的代码问题:
- 你先把输入的日期转成了
eff_dt这个合法的Date对象,这一步完全没问题。 - 但接下来你把
eff_dt拼接成了dt_cl——这是一个mm/dd/yyyy格式的字符串,不是Date实例!字符串根本没有getDate()这种日期专属方法,所以浏览器才会抛出那个TypeError。
修正后的代码
正确的做法是直接在原始的Date对象上做日期计算,不用先转成字符串。这里给你改好的可用代码:
$('#dt_input').change(function() { var dep_dt = $(this).val(); $('#eff_input').val(dep_dt); // 将输入值转换为Date对象 var eff_dt = new Date(dep_dt); // 复制原Date对象(避免修改原日期的原始值),然后添加364天 var exp_dt = new Date(eff_dt); exp_dt.setDate(exp_dt.getDate() + 364); // 可选:把计算后的日期转成标准mm/dd/yyyy格式的字符串 var formattedExpDt = (exp_dt.getMonth() + 1).toString().padStart(2, '0') + '/' + exp_dt.getDate().toString().padStart(2, '0') + '/' + exp_dt.getFullYear(); // 示例:如果有需要,可以把格式化后的日期赋值给其他输入框 // $('#exp_input').val(formattedExpDt); });
几个关键提醒
- 日期操作只在Date实例上进行:所有像
getDate()、setDate()这类方法,只能被Date对象调用,字符串和其他类型都不支持。 - 复制Date对象很重要:直接修改原
eff_dt会改变它的原始值,用new Date(eff_dt)复制一份再修改,能避免后续逻辑出现意外问题。 - 规范日期格式:用
padStart(2, '0')可以让月份和日期保持两位数(比如1月变成01,9号变成09),避免出现1/5/2024这种格式不统一的情况。 - 输入日期兼容性:要确保用户输入的日期格式是浏览器能识别的(比如
mm/dd/yyyy、yyyy-mm-dd),如果是自定义格式,可能需要额外的解析逻辑。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

