我有一个 PDF 表单,每个月的每一天都有 6 个不同的时间段,我需要确保这些时间段在用户完成时不会重叠。并非所有时间段都可以完成,但完成的时间段必须是唯一的。我从上一篇文章中获得了灵感使用 JavaScript 比较时间范围特别是@RobG 的贡献。但是,我缺乏脚本知识,这妨碍了我为我的特定应用程序塑造该代码的能力。除了验证时间段之外,我还必须在表格上的每一天都重复此操作,但我想一次做一次,特别是在当天输入条目时。由于这是一个 PDF 表单,我不确定如何执行该验证。例如,是否应该在每个时间段完成时执行?也就是说,有一个开始时间和结束时间?所以它会作为那个时间条目的“验证”脚本?以下是表单的示例:
这是我为我的表单更新代码的尝试:
var TimeIn1 = this.getField("Day1Pd1TimeInRes").value;
var TimeOut1 = this.getField("Day1Pd1TimeOutRes").value;
var TimeIn2 = this.getField("Day1Pd2TimeInRes").value;
var TimeOut2 = this.getField("Day1Pd2TimeOutRes").value;
var TimeIn3 = this.getField("Day1Pd3TimeInRes").value;
var TimeOut3 = this.getField("Day1Pd3TimeOutRes").value;
var TimeIn4 = this.getField("Day1Pd4TimeInRes").value;
var TimeOut4 = this.getField("Day1Pd4TimeOutRes").value;
var TimeIn5 = this.getField("Day1Pd5TimeInRes").value;
var TimeOut5 = this.getField("Day1Pd5TimeOutRes").value;
var TimeIn6 = this.getField("Day1Pd6TimeInRes").value;
var TimeOut6 = this.getField("Day1Pd6TimeOutRes").value;
var timeSlots = [
{BeginTime: new Date("10/25/2015 " + TimeIn1),
EndTime: new Date("10/25/2015 " + TimeOut1)},
{BeginTime: new Date("10/25/2015 " + TimeIn2),
EndTime: new Date("10/25/2015 " + TimeOut2)},
{BeginTime: new Date("10/25/2015 " + TimeIn3),
EndTime: new Date("10/25/2015 " + TimeOut3)},
{BeginTime: new Date("10/25/2015 " + TimeIn4),
EndTime: new Date("10/25/2015 " + TimeOut4)},
{BeginTime: new Date("10/25/2015 " + TimeIn5),
EndTime: new Date("10/25/2015 " + TimeOut5)},
{BeginTime: new Date("10/25/2015 " + TimeIn6),
EndTime: new Date("10/25/2015 " + TimeOut6)}
];
function slotFits(slot) {
if (timeSlots.length == 0) return true; // If no slots, must fit
return timeSlots.some(function(s, i) {
return (i == 0 && slot.EndTime <= s.BeginTime) || //slot is before all others
(s.EndTime <= slot.BeginTime && !timeSlots[i + 1]) || //slot is after all others
(s.EndTime <= slot.BeginTime && timeSlots[i + 1].BeginTime >= slot.EndTime) // Slot between others
});
}
[{BeginTime: new Date("10/25/2015 " + TimeIn1),
EndTime: new Date("10/25/2015 " + TimeOut1)},
{BeginTime: new Date("10/25/2015 " + TimeIn2),
EndTime: new Date("10/25/2015 " + TimeOut2)},
{BeginTime: new Date("10/25/2015 " + TimeIn3),
EndTime: new Date("10/25/2015 " + TimeOut3)},
{BeginTime: new Date("10/25/2015 " + TimeIn4),
EndTime: new Date("10/25/2015 " + TimeOut4)},
{BeginTime: new Date("10/25/2015 " + TimeIn5),
EndTime: new Date("10/25/2015 " + TimeOut5)},
{BeginTime: new Date("10/25/2015 " + TimeIn6),
EndTime: new Date("10/25/2015 " + TimeOut6)},
].forEach(function(slot, i) {
app.alert('Slot ' + i + ': ' + slotFits(slot));
});
在这个示例中,我拼出了字段名称,但是因为我一次最多会重复 31 天,所以我想找到一种方法来创建一个文档脚本,我可以在其中输入“TimeIn”和“TimeOut”变量并每天调用它们,但我认为如果有必要我可以不这样做,只需担心表单大小在 6 个周期内重复那么多代码,可能持续 31 天。谢谢!
编辑:时间值是 HH:mm