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

PDF脚本需求:实现可编辑的30天以上关联日期字段

解决PDF日期字段默认30天后且支持手动修改(仅允许更晚日期)的问题

我明白你的问题了——原来的脚本每次都会强制把字段值设为CurrentDate之后30天,导致你手动输入的更晚日期一刷新就被覆盖了对吧?别担心,咱们调整一下脚本逻辑,分两步解决这个问题:

问题根源

你原来的代码每次执行计算时,都会无条件将字段值设置为CurrentDate+30天,不管用户有没有手动输入过更晚的日期,所以你的修改会被直接覆盖掉。

解决方案:计算脚本+验证脚本配合

我们需要两个脚本协同工作:一个负责默认填充初始值(只在字段为空时生效),另一个负责验证用户输入的合法性(阻止早于30天的日期)。

1. 自定义计算脚本(负责默认填充)

在目标日期字段的「计算」标签下,选择「自定义计算脚本」,替换成下面的代码:

// 获取CurrentDate字段的值
var currentDateStr = this.getField("CurrentDate").value;
if (!currentDateStr) {
    // 如果CurrentDate还没填,目标字段留空
    event.value = "";
    return;
}

// 解析CurrentDate为日期对象
var currentDate = util.scand("mm/dd/yy", currentDateStr);
// 计算30天后的最小允许日期
var minDate = new Date(currentDate);
minDate.setDate(minDate.getDate() + 30);

// 只有当目标字段当前为空时,才设置默认值
if (!event.value) {
    event.value = util.printd("mm/dd/yy", minDate);
}

这个脚本的逻辑是:只有当目标字段没有值的时候,才自动填充30天后的日期;如果用户已经手动输入了更晚的日期,就保留用户的输入,不会强制覆盖。

2. 自定义验证脚本(负责阻止非法输入)

接着在目标日期字段的「验证」标签下,选择「自定义验证脚本」,添加下面的代码:

// 先检查CurrentDate是否已填写
var currentDateStr = this.getField("CurrentDate").value;
if (!currentDateStr) {
    app.alert("请先填写CurrentDate字段!");
    event.rc = false; // 拒绝当前输入
    return;
}

// 解析CurrentDate和用户输入的日期
var currentDate = util.scand("mm/dd/yy", currentDateStr);
var userDate = util.scand("mm/dd/yy", event.value);

// 计算最小允许日期
var minAllowedDate = new Date(currentDate);
minAllowedDate.setDate(minAllowedDate.getDate() + 30);

// 验证日期是否合法
if (userDate < minAllowedDate) {
    app.alert("日期不能早于CurrentDate之后30天,请重新输入!");
    event.rc = false; // 拒绝非法输入
} else {
    event.rc = true; // 允许合法输入
}

这个脚本会在用户输入或修改日期时触发,如果输入的日期早于CurrentDate+30天,就弹出提示并拒绝保存这个值。

注意事项

  • 确保你的日期格式和脚本里的mm/dd/yy一致,如果你的表单用的是其他格式(比如yyyy-mm-dd),要同步修改scand和printd里的格式字符串。
  • 测试的时候,先填写CurrentDate,目标字段会自动填充30天后的日期;尝试输入更早的日期会收到错误提示;输入更晚的日期则可以正常保存。

内容的提问来源于stack exchange,提问作者Woods

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:23:30