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

复选框勾选时计算两日期间隔天数的代码问题求助

解决请假天数计算的两个问题:勾选时少一天、未勾选时无结果

我来帮你搞定这两个问题!先拆解下问题根源,再给你修正后的完整代码:

问题根源分析

  1. cb1勾选时少一天:通常是因为直接计算日期间隔时,只统计了两个日期之间的"间隔天数",没有包含起始日当天。比如1号到2号,间隔是1天,但实际请假天数应该是2天。
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:58