月の各日に 6 つの異なる期間を持つ PDF フォームがあり、ユーザーが完了したときにそれらの期間が重複しないようにする必要があります。すべての期間が完了するわけではありませんが、完了する期間は一意である必要があります。この以前の投稿からインスピレーションを得ましたJavaScript を使用して時間範囲を比較します特に@RobGによる貢献。ただし、スクリプトに関する知識が不足しているため、特定のアプリケーション用にそのコードを作成する能力が妨げられています。期間を確認するだけでなく、フォームで毎日これを繰り返す必要がありますが、特にその日のエントリが作成されている場合は、一度に 1 日ずつ実行したいと考えています。これは 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です