Copy link to clipboard
Copied
I have a timesheet where I need to calculate times for day and night shift workers (with breaks) in 24hr time.
I can get the day shift hours to calculate fine however the I cannot get the night shift hours to calculate correctly.
Below is a screen shot of the fields and the field names along with the script I am currently using on the top line (I have used the same script on the second line but changed the field names to match i.e 8.1.0 instead of 8.0.0).
var start = this.getField("8.0.0").value;
var finish = this.getField("11.0.0").value;
if (start=="" || finish=="") event.value = "";
else {
var lunchout = this.getField("9.0.0").value;
var lunchin = this.getField("10.0.0").value;
var startArr = start.split(":");
var finishArr = finish.split(":");
var hourWDiff = Math.abs(finishArr[0] - startArr[0]);
var minWDiff = (Math.abs(finishArr[1] - startArr[1])/60*100);
var hourLDiff = 0;
var minLDiff = 0;
if (lunchout!="" && lunchin!="") {
var lunchoutArr = lunchout.split(":");
var lunchinArr = lunchin.split(":");
hourLDiff = Math.abs(lunchoutArr[0] - lunchinArr[0]);
minLDiff = (Math.abs(lunchoutArr[1] - lunchinArr[1])/60*100);
}
var totalHrs = hourWDiff + (minWDiff/100) - (hourLDiff + (minLDiff/100));
event.value = totalHrs;
}
Copy link to clipboard
Copied
Try this:
var start = this.getField("8.0").value;
var finish = this.getField("11.0").value;
if (start == "" || finish == "") {
event.value = "";}
else {
var lunchout = this.getField("9.0").value;
var lunchin = this.getField("10.0").value;
var startArr = start.split(":").map(Number);
var finishArr = finish.split(":").map(Number);
var startHour = startArr[0];
var startMin = startArr[1];
var finishHour = finishArr[0];
var finishMin = finishArr[1];
if (finishHour < startHour || (finishHour === startHour && finishMin < startMin)) {
finishHour += 24;}
var hourWDiff = finishHour - startHour;
var minWDiff = (finishMin - startMin) / 60;
var hourLDiff = 0;
var minLDiff = 0;
if (lunchout != "" && lunchin != "") {
var lunchoutArr = lunchout.split(":").map(Number);
var lunchinArr = lunchin.split(":").map(Number);
var lunchOutHour = lunchoutArr[0];
var lunchOutMin = lunchoutArr[1];
var lunchInHour = lunchinArr[0];
var lunchInMin = lunchinArr[1];
if (lunchInHour < lunchOutHour || (lunchInHour === lunchOutHour && lunchInMin < lunchOutMin)) {
lunchInHour += 24;}
hourLDiff = lunchInHour - lunchOutHour;
minLDiff = (lunchInMin - lunchOutMin) / 60; }
var totalHrs = (hourWDiff + minWDiff) - (hourLDiff + minLDiff);
event.value = totalHrs;}
Copy link to clipboard
Copied
Thank you so much Nesa, works perfectly 😁
Copy link to clipboard
Copied
Hi Nesa, I have found a little gremlin in this 😞
Something isn’t quite right with the lunch calculations.. The top line has calculated corrected at 9.5 hours but when you change the lunch break at 11:30 – 12:00 it drop back to 8.5 hours?
Still using as below:
var start = this.getField("8.0").value; var finish = this.getField("11.0").value; if (start == "" || finish == "") { event.value = "";} else { var lunchout = this.getField("9.0").value; var lunchin = this.getField("10.0").value; var startArr = start.split(":"); var finishArr = finish.split(":"); var startHour = parseInt(startArr[0]); var finishHour = parseInt(finishArr[0]); if (finishHour < startHour) { finishHour += 24;} var hourWDiff = finishHour - startHour; var minWDiff = (Math.abs(finishArr[1] - startArr[1]) / 60) * 100; var hourLDiff = 0; var minLDiff = 0; if (lunchout != "" && lunchin != "") { var lunchoutArr = lunchout.split(":"); var lunchinArr = lunchin.split(":"); hourLDiff = Math.abs(lunchoutArr[0] - lunchinArr[0]); minLDiff = (Math.abs(lunchoutArr[1] - lunchinArr[1]) / 60) * 100;} var totalHrs = hourWDiff + (minWDiff / 100) - (hourLDiff + (minLDiff / 100)); event.value = totalHrs;}