复选框勾选时计算两日期间隔天数的代码问题求助
解决请假天数计算的两个问题:勾选时少一天、未勾选时无结果
我来帮你搞定这两个问题!先拆解下问题根源,再给你修正后的完整代码:
问题根源分析
- cb1勾选时少一天:通常是因为直接计算日期间隔时,只统计了两个日期之间的"间隔天数",没有包含起始日当天。比如1号到2号,间隔是1天,但实际请假天数应该是2天。
- cb1未勾选时无结果:原代码大概率没有完善
cb1为"Off"的逻辑分支,或者分支内的工作日计算逻辑缺失,导致没有输出结果。
修正后的完整代码
(function () { // 获取控件值 var cb1Status = getField("cb1").value; var startDateStr = this.getField("LeaveFrom").value; var endDateStr = this.getField("LeaveEnd").value; // 替换成你实际用来显示结果的字段名 var resultField = this.getField("TotalLeaveDays"); // 先判断日期是否有效,避免空值报错 if (!startDateStr || !endDateStr) { resultField.value = ""; return; } // 转换为Date对象 var dStart = new Date(startDateStr); var dEnd = new Date(endDateStr); if (cb1Status !== "Off") { // 计算总天数:间隔天数+1,包含起始和结束日 var totalDays = Math.floor((dEnd - dStart) / (1000 * 60 * 60 * 24)) + 1; resultField.value = totalDays; } else { // 计算排除周末的工作日天数 var workDayCount = 0; var currentDate = new Date(dStart); // 遍历从起始日到结束日的每一天 while (currentDate <= dEnd) { var dayOfWeek = currentDate.getDay(); // 排除周日(0)和周六(6) if (dayOfWeek !== 0 && dayOfWeek !== 6) { workDayCount++; } // 日期往后推一天 currentDate.setDate(currentDate.getDate() + 1); } resultField.value = workDayCount; } })();
关键修正点说明
- 日期有效性校验:先判断起始/结束日期是否为空,避免空值导致的计算错误
- 总天数计算修正:在日期间隔天数基础上加1,解决"少一天"的问题(比如2024-01-01到2024-01-02,间隔1天,加1后得到正确的2天)
- 工作日逻辑补全:通过循环遍历每一天,过滤周末日期,统计有效工作日数量,确保未勾选时有正确输出
- 统一结果赋值:所有分支都将结果赋值到指定字段,保证两种状态下都有输出
内容的提问来源于stack exchange,提问作者Pizush
相关产品推荐
相关产品推荐

