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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:45