需求年休假延期计算选择结束日期和延期月份(选择框)后计算并赋值给延期日期。实现效果如图使用的js代码var ksrq field22251; // 年休假开始日期 var jsrq field22252; // 年休假结束日期 var yqyf field22256; // 延期月份选择框 var yqrq field22255; // 延期至日期 $(document).ready(function () { //延期月份被选择时调用calculateYqrqFromJsrq函数 jQuery(# yqyf).bindPropertyChange(function () { calculateYqrqFromJsrq(); }); }); // 计算延期日期的函数 function calculateYqrqFromJsrq() { // 获取结束日期 var endDateStr $(# jsrq).val(); if (!endDateStr) { console.warn(结束日期为空无法计算延期日期); return; } var endDate new Date(endDateStr); if (isNaN(endDate)) { console.error(结束日期格式不正确 endDateStr); return; } // 获取延期月份value是0~5实际表示1~6个月 //parseInt()用于把字符串转成整数。, 10 表示以 十进制 解析. var selectedMonthValue $(# yqyf).val(); if (selectedMonthValue null || selectedMonthValue ) { return; } var addedMonths parseInt(selectedMonthValue, 10) 1; // 计算新的日期.调用 addMonths 函数将“结束日期”加上“延期月份数”得到一个新的日期对象。 //调用 formatDate 函数把 newDate 这个日期对象格式化成标准字符串 YYYY-MM-DD 格式。 var newDate addMonths(endDate, addedMonths); var formattedDate formatDate(newDate); // 更新延期日期字段 $(# yqrq).val(formattedDate);//写入隐藏字段提交用 $(#field22255span).text(formattedDate);// 显示在页面上 } // 增加指定月份数 //定义addMonths函数接收两个参数:date原始日期JS的Date对象months:要增加的月份数字。 function addMonths(date, months) { //创建一个新的 Date 对象复制传入的 date。为什么要复制因为JS中直接操作date会修改原对象。为不改变原始数据所以先“克隆”一份。 var result new Date(date); //getMonth() 返回当前月份0~11。setMonth(...) 设置新的月份可以自动进位年份。 result.setMonth(result.getMonth() months); //返回计算后的新日期对象。 return result; } // 格式化为 YYYY-MM-DD //定义一个函数把 Date 对象转成形如 2025-09-16 的字符串。 function formatDate(date) { //获取完整年份如 2025。 var year date.getFullYear(); //date.getMonth()返回月 0~11所以必须 1 才是真实月份。.slice(-2) → 取最后两位字符。 var month (0 (date.getMonth() 1)).slice(-2); //同上:getDate() 返回几号1~31加 0 后取最后两位保证天数也是两位数505 1515。 var day (0 date.getDate()).slice(-2); //拼接成标准日期格式字符串YYYY-MM-DD例如2025-09-05 return year - month - day; }js代码完整版script typetext/javascript var ksrq field22251; // 年休假开始日期 var jsrq field22252; // 年休假结束日期 var yqyf field22256; // 延期月份选择框 var yqrq field22255; // 延期至日期 $(document).ready(function () { jQuery(# yqyf).bindPropertyChange(function () { calculateYqrqFromJsrq(); }); }); function calculateYqrqFromJsrq() { // 获取结束日期 var endDateStr $(# jsrq).val(); if (!endDateStr) { console.warn(结束日期为空无法计算延期日期); return; } var endDate new Date(endDateStr); if (isNaN(endDate)) { console.error(结束日期格式不正确 endDateStr); return; } // 获取延期月份value是0~5实际表示1~6个月 var selectedMonthValue $(# yqyf).val(); if (selectedMonthValue null || selectedMonthValue ) { return; } var addedMonths parseInt(selectedMonthValue, 10) 1; // 计算新的日期 var newDate addMonths(endDate, addedMonths); var formattedDate formatDate(newDate); // 更新延期日期字段 $(# yqrq).val(formattedDate); $(#field22255span).text(formattedDate); } // 增加指定月份数 function addMonths(date, months) { var result new Date(date); result.setMonth(result.getMonth() months); return result; } // 格式化为 YYYY-MM-DD function formatDate(date) { var year date.getFullYear(); var month (0 (date.getMonth() 1)).slice(-2); var day (0 date.getDate()).slice(-2); return year - month - day; } /script方法二已测试可行script typetext/javascript var ksrq field22251; // 年休假开始日期 var jsrq field22252; // 年休假结束日期 var yqyf field22256; // 延期月份选择框 var yqrq field22255; // 延期至日期 $(document).ready(function () { jQuery(# yqyf).bindPropertyChange(function () { calculateYqrqFromJsrq(); }); }); function calculateYqrqFromJsrq() { // 获取结束日期的值 var endDateValue jQuery(# jsrq).val(); // 获取选择的延期月份值(0-5)实际代表1-6个月 var monthToAdd parseInt(jQuery(# yqyf).val()) || 0; // 如果结束日期或延期月份未选择则清空延期日期 if (!endDateValue || isNaN(monthToAdd)) { jQuery(# yqrq).val(); jQuery(# yqrq span).text(); return; } // 转换为实际需要添加的月份数(加1) monthToAdd 1; // 解析结束日期为日期对象 var endDateParts endDateValue.split(-); var endDate new Date( parseInt(endDateParts[0]), // 年 parseInt(endDateParts[1]) - 1, // 月(JavaScript月份从0开始) parseInt(endDateParts[2]) // 日 ); // 计算延期后的日期 var newMonth endDate.getMonth() monthToAdd; var newYear endDate.getFullYear(); // 处理月份超过12的情况 if (newMonth 11) { newYear Math.floor(newMonth / 12); newMonth newMonth % 12; } // 创建新日期对象 var dueDate new Date(newYear, newMonth, endDate.getDate()); // 格式化日期为YYYY-MM-DD var formattedDate dueDate.getFullYear() - (0 (dueDate.getMonth() 1)).slice(-2) - (0 dueDate.getDate()).slice(-2); // 设置延期日期的值 jQuery(# yqrq).val(formattedDate); jQuery(# yqrq span).text(formattedDate); // 触发相关事件确保表单验证等功能正常 if (document.createEvent) { var event document.createEvent(HTMLEvents); event.initEvent(propertychange, true, true); jQuery(# yqrq)[0].dispatchEvent(event); } else { jQuery(# yqrq)[0].fireEvent(onpropertychange); } } // 给结束日期添加变化事件监听 jQuery(# jsrq).bindPropertyChange(function() { // 当结束日期变化时如果已有延期月份选择重新计算延期日期 if (jQuery(# yqyf).val()) { calculateYqrqFromJsrq(); } }); /script