There are many calculations that can be used in form templates. 


General concept is the object name in square brackets [ XXXX ] method of operation then object name, again, in square brackets.


Time Calculations;


Start Time = [startTime]

Finish Time = [finishTime]

Breaks = [minusBreaks]


In the time calculation Input options Advanced Calculation must be ticked, times must be mandatory.

Use the below code in the calculation box


  • var timediff = myNS.helper.time_diff( "01/01/1999 [startTime]", ([startTime] > [finishTime] ? "01/02/1999 [finishTime]" : "01/01/1999 [finishTime]") ); value = (timediff.hours + ((timediff.minutes / 60))) - [minusBreaks];


If no breaks in the form,


  • var timediff = myNS.helper.time_diff( "01/01/1999 [startTime]", ([startTime] > [finishTime] ? "01/02/1999 [finishTime]" : "01/01/1999 [finishTime]") ); value = (timediff.hours + ((timediff.minutes / 60)));

For Rounded times to nearest 15 minutes. For half hour change (value * 4) / 4) to (value * 2) / 2.var timediff = myNS.helper.time_diff( "01/01/1999 [startTime]", ([startTime] > [finishTime] ? "01/02/1999 [finishTime]" : "01/01/1999 [finishTime]") ); value = (timediff.hours + ((timediff.minutes / 60))); value = (Math.round(value * 4) / 4).toFixed(2)

For Rounded times upto next 15 minutes. For half hour change (value * 4) / 4) to (value * 2) / 2.var timediff = myNS.helper.time_diff( "01/01/1999 [startTime]", ([startTime] > [finishTime] ? "01/02/1999 [finishTime]" : "01/01/1999 [finishTime]") ); value = (timediff.hours + ((timediff.minutes / 60))); value = (Math.ceil(value * 4) / 4).toFixed(2);


For Time Calculations over Multiple days,


"[XXXXstartDate]"; "[XXXXfinishDate]"; 

"[XXXXstartTime]"; "[XXXXfinishTime]"; 

var startdate = (

    strtotime(

        `${formObject.returnObjectSP("XXXXstartDate", this.repeatedCount)[0].getValue()} ${formObject.returnObjectSP("XXXXstartTime", this.repeatedCount)[0].getValue()}`

    ));

var enddate = (

    strtotime(

        `${formObject.returnObjectSP("XXXXfinishDate", this.repeatedCount)[0].getValue()} ${formObject.returnObjectSP("XXXXfinishTime", this.repeatedCount)[0].getValue()}`

    ));

var timediff = myNS.helper.time_diff( date('Y/m/d H:i', startdate), date('Y/m/d H:i', enddate) ); 

value = (timediff.days * 24) + (timediff.hours + ((timediff.minutes / 60)));


XX indicates where time field object names  from the form  need to be added to the calculation 


For Calculations over Multiple days (without time),


Variables are startDate and finishDate

"[startDate]"; "[finishDate]";

var startdate = (strtotime(formObject.returnObjectSP("startDate", this.repeatedCount)[0].getValue())-0); 

var enddate = (strtotime(formObject.returnObjectSP("finishDate", this.repeatedCount)[0].getValue())-0); 

var timediff = myNS.helper.time_diff( date('Y/m/d H:i', startdate), date('Y/m/d H:i', enddate) ); 

value = (timediff.days);


Overtime  Calcs

Hours Calc:  var timediff = myNS.helper.time_diff( "01/01/1999 [startTime]", ([startTime] > [finishTime] ? "01/02/1999 [finishTime]" : "01/01/1999 [finishTime]") ); value = (timediff.hours + ((timediff.minutes / 60)));

Total Hours Field Name= totalHours

Normal Hours Field Name = normalHours

Normal Hours Calc:  if([totalHours] > 8) value = 8; else value = [totalHours];

Time Half Calc:  if([totalHours] - [normalHours] > 2) value = 2; else value = [totalHours] - [normalHours];

Double Time Calc:  if([totalHours] > 10) value = [totalHours] - 10;


Time calculations cannot calculate a date with X number of days to equal a new date.