У меня есть 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 дня. Спасибо!
Редактировать: Значения времени: ЧЧ: мм