Reputation: 789
Working on a PDF form in LiveCycle Designer, I have a field where employees will enter the proposed effective date for a schedule change. These can only be effective on the start of a pay period, which is every other Sunday. (For reference, Sunday, Jan 30, 2022 is a start of a pay period.)
I've tried very many ways of using if statements and the date.getDay() method, but I find that the getDay method sometimes returns the wrong number (the employee enters a date for a Sunday, but the code gets a getDay value of 1 instead of 0). I assume this has something to do with the local time, but not sure.
For reference, here is the code I currently have in my change event. I can't say for sure the rest of it works, as I can't get past the getDay problem. Anyway, appreciate either a fix to my getDay problem, or a more elegant solution to this whole problem that avoids it.
topmostSubform.Page1.Artifact[3].dateEffective::change - (JavaScript, client)
// Check if entered date is a Sunday at the start of a pay period.
// For reference, Sunday 1/30/2022 is the start of a pay period.
// perform this check only if something is entered in this field
xfa.host.messageBox('Value: ' + xfa.event.newText);
xfa.host.messageBox('Is an entry?: ' + !(!xfa.event.newText));
if (!(!xfa.event.newText)) {
const myRefDate = new Date(2022, 1, 30);
const myDate = new Date(xfa.event.newText);
xfa.host.messageBox('Day: ' + myDate.getDay());
// first check if entered date is a Sunday. If so, then execute the other code.
if (myDate.getDay() == 0) {
const diffTime = Math.abs(myRefDate - myDate);
xfa.host.messageBox('diffTime: ' + diffTime);
const diffDays = diffTime / (1000 * 60 * 60 * 24); // includes fractional days
xfa.host.messageBox('diffDays: ' + diffDays);
const diffPP = diffDays / 14; // includes fractional parts of a 14-day pay period
xfa.host.messageBox('diffPP: ' + diffPP);
const remainderPP = diffPP % 1; // calculate remainder of diffPP
xfa.host.messageBox('remainderPP: ' + remainderPP);
// if the remainderPP value indicates that myDate is more than 1 day from a Sunday, then fail
if (remainderPP * 14 > 1) {
// messagebox with error
xfa.host.messageBox('Error1: You must enter the date for a Sunday that is the start of a pay period. Check your Pay/Holiday Schedule.');
xfa.host.setFocus(this.name);
}
}else{
xfa.host.messageBox('Error2: You must enter the date for a Sunday that is the start of a pay period. Check your Pay/Holiday Schedule.');
xfa.host.setFocus(this.name);
}
};
Upvotes: 0
Views: 47