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

给日期添加天数时触发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);
});

几个关键提醒

  1. 日期操作只在Date实例上进行:所有像getDate()、setDate()这类方法,只能被Date对象调用,字符串和其他类型都不支持。
  2. 复制Date对象很重要:直接修改原eff_dt会改变它的原始值,用new Date(eff_dt)复制一份再修改,能避免后续逻辑出现意外问题。
  3. 规范日期格式:用padStart(2, '0')可以让月份和日期保持两位数(比如1月变成01,9号变成09),避免出现1/5/2024这种格式不统一的情况。
  4. 输入日期兼容性:要确保用户输入的日期格式是浏览器能识别的(比如mm/dd/yyyy、yyyy-mm-dd),如果是自定义格式,可能需要额外的解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:18