jQuery Datepicker无法设置日期问题求助
解决jQuery Datepicker无法通过变量设置日期的问题
我一眼就看到你代码里的两个关键错误,这就是导致Date对象创建失败、Datepicker始终显示当前日期的原因:
错误1:substr方法的参数使用错误
你用了birth.substr(3, 5)来获取月份,但substr的第二个参数是截取的长度,不是结束索引!比如你的日期是22-11-2000,从索引3开始取5个字符的话,得到的是1-200,转成数字就是1,这显然不是你要的月份。同理,substr(6, 10)也会截取超出字符串长度的内容,虽然可能刚好得到年份,但写法是错误的。
正确的截取方式应该是:
- 月份:从索引3开始,截取2个字符 →
birth.substr(3, 2) - 年份:从索引6开始,截取4个字符 →
birth.substr(6, 4)
错误2:Date对象的月份参数是0起始的
JavaScript的Date对象中,月份是从0开始计数的(0=1月,11=12月)。你直接把截取到的月份数字传入,比如拿到11(对应11月),传入new Date(year, 11, day)会创建12月的日期,这种不匹配会导致Datepicker无法正确识别,最终 fallback 到当前日期。
修复后的完整代码
$(function () { // 初始化Datepicker $('#empBirthDate').datepicker({ format: 'dd-mm-yyyy', language: 'pl' }).datepicker("setDate", new Date()); // 获取目标日期字符串,加trim()避免前后空格干扰 var birth = $('#birthID' + empEvidenceNumber).text().trim(); // 正确截取并处理日期部分 var day = parseInt(birth.substr(0, 2)); var month = parseInt(birth.substr(3, 2)) - 1; // 月份减1适配Date对象规则 var year = parseInt(birth.substr(6, 4)); // 验证有效性后设置日期 if (!isNaN(day) && !isNaN(month) && !isNaN(year)) { $('#empBirthDate').datepicker("setDate", new Date(year, month, day)); } });
额外说明
加trim()是为了避免目标元素文本中可能存在的前后空格,防止截取的字符串包含空格导致转数字出错;新增的有效性判断则能避免因意外的日期格式导致代码报错。
内容的提问来源于stack exchange,提问作者Carath
相关产品推荐
相关产品推荐

