设置值时日期异常变为1969年12月31日问题排查
问题分析与解决办法
这问题挺有意思的,我碰到过类似的情况,大概率是下面两个原因之一,咱们一步步拆解:
1. HTML5日期输入框的格式要求不匹配
如果你的隐藏输入框类型是<input type="date">,那这就是最可能的原因!HTML5的date输入类型强制要求值必须是YYYY-MM-DD格式,而你的gettoday()函数返回的是DD/MM/YYYY(比如25/10/2024),浏览器无法解析这个格式,就会默认显示无效日期——也就是你看到的31/12/1969(对应Unix时间戳0的前一天,无效日期的常见默认显示)。
解决办法:
- 如果你需要保留
date输入类型(比如要用到浏览器自带的日期选择器),修改gettoday()函数返回符合要求的格式:
function gettoday() { var d = new Date(); var month = String(d.getMonth() + 1).padStart(2, '0'); var day = String(d.getDate()).padStart(2, '0'); var year = d.getFullYear(); return `${year}-${month}-${day}`; // 输出格式:2024-10-25 }
- 如果不需要日期选择器,把输入框的类型改成
<input type="text">,这样就能正常显示你原来的DD/MM/YYYY格式了。
2. jQuery设置值的方法不正确
你用了something.attr('value', String(gettoday()));来设置输入框的值,但在jQuery中,设置表单元素的当前值应该用val()方法,而不是attr()。attr()是用来设置元素的初始属性值,动态更新表单值时,attr()可能不会正确同步到DOM的实际显示值上,尤其是部分浏览器对表单元素的value属性有特殊处理逻辑。
解决办法:
把设置值的代码改成:
something.val(gettoday());
你可以先检查输入框的type属性,如果是date就先调整格式,再配合val()方法,应该就能解决问题了!
内容的提问来源于stack exchange,提问作者cpl
相关产品推荐
相关产品推荐

