Skip to main content
lil redrum
Participant
May 16, 2024
Question

Time Calculation with break (Day and Night Shift) in 24hr format

  • May 16, 2024
  • 1 reply
  • 740 views

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;
}

1 reply

Nesa Nurani
Community Expert
Community Expert
May 16, 2024

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;}

 

lil redrum
Participant
May 16, 2024

Thank you so much Nesa, works perfectly 😁