timesheet calculations

New Here ,
May 21, 2019

Copy link to clipboard

Copied

I know this topic has been covered extensively but I have spent too much time searching past questions/answers.  If anyone can point me to the right place I would much appreciate it. 

I am creating a timesheet in PDF form and although I can calculate the difference in starttime, lunchout, lunchin, endtime the result does not format properly.

Instead of getting say 5.5 hrs the result is 5.30 hrs.   7:00 starttime; 10:30 lunchout; 11:00 lunchin; 13:00 endtime.

Here's my code so far:

// start
var start = this.getField("Start1_1").value;
var startArr = start.split(":");

//lunchout
var lunchout = this.getField("LunchOut1").value;
var lunchoutArr = lunchout.split(":");

//lunchin
var lunchin = this.getField("LunchIn1").value;
var lunchinArr = lunchin.split(":");

// finish
var finish = this.getField("End1_1").value;
var finishArr = finish.split(":");

// difference
var hourDiff = Math.abs(lunchoutArr[0] - startArr[0])+ Math.abs(finishArr[0]-lunchinArr[0]);
var minDiff = (Math.abs(lunchoutArr[1]-startArr[1])+ Math.abs(finishArr[1]-lunchinArr[1])/60*100);
if (minDiff.toString().length == 1)
    minDiff = '0' + minDiff;

var output = hourDiff + "." + minDiff;
event.value = output;

Thanks so much for any assistance.  I really need to get this finished.

Lynda

Most Valuable Participant
Correct answer by try67 | Most Valuable Participant

Change this:

var output = hourDiff + "." + minDiff;

To:

var output = hourDiff + (minDiff/60);

TOPICS
Acrobat SDK and JavaScript, Windows

Views

383

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more

timesheet calculations

New Here ,
May 21, 2019

Copy link to clipboard

Copied

I know this topic has been covered extensively but I have spent too much time searching past questions/answers.  If anyone can point me to the right place I would much appreciate it. 

I am creating a timesheet in PDF form and although I can calculate the difference in starttime, lunchout, lunchin, endtime the result does not format properly.

Instead of getting say 5.5 hrs the result is 5.30 hrs.   7:00 starttime; 10:30 lunchout; 11:00 lunchin; 13:00 endtime.

Here's my code so far:

// start
var start = this.getField("Start1_1").value;
var startArr = start.split(":");

//lunchout
var lunchout = this.getField("LunchOut1").value;
var lunchoutArr = lunchout.split(":");

//lunchin
var lunchin = this.getField("LunchIn1").value;
var lunchinArr = lunchin.split(":");

// finish
var finish = this.getField("End1_1").value;
var finishArr = finish.split(":");

// difference
var hourDiff = Math.abs(lunchoutArr[0] - startArr[0])+ Math.abs(finishArr[0]-lunchinArr[0]);
var minDiff = (Math.abs(lunchoutArr[1]-startArr[1])+ Math.abs(finishArr[1]-lunchinArr[1])/60*100);
if (minDiff.toString().length == 1)
    minDiff = '0' + minDiff;

var output = hourDiff + "." + minDiff;
event.value = output;

Thanks so much for any assistance.  I really need to get this finished.

Lynda

Most Valuable Participant
Correct answer by try67 | Most Valuable Participant

Change this:

var output = hourDiff + "." + minDiff;

To:

var output = hourDiff + (minDiff/60);

TOPICS
Acrobat SDK and JavaScript, Windows

Views

384

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
May 21, 2019 0
Most Valuable Participant ,
May 21, 2019

Copy link to clipboard

Copied

Change this:

var output = hourDiff + "." + minDiff;

To:

var output = hourDiff + (minDiff/60);

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 21, 2019 1
New Here ,
May 21, 2019

Copy link to clipboard

Copied

You are my new best friend!!!!

Thank you so much. : )

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 21, 2019 0
New Here ,
May 21, 2019

Copy link to clipboard

Copied

Oy, now I need to adjust the code to allow NO lunch break.  Any suggestion?

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 21, 2019 0
Most Valuable Participant ,
May 21, 2019

Copy link to clipboard

Copied

You need to be more specific than that.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 21, 2019 0
New Here ,
May 22, 2019

Copy link to clipboard

Copied

Of course, sorry.

I need to modify this code in the event that the employee does not take a lunch break.

// start
var start = this.getField("Start1_1").value;
var startArr = start.split(":");

//lunchout
var lunchout = this.getField("LunchOut1").value;
var lunchoutArr = lunchout.split(":");

//lunchin
var lunchin = this.getField("LunchIn1").value;
var lunchinArr = lunchin.split(":");

// finish
var finish = this.getField("End1_1").value;
var finishArr = finish.split(":");

// difference
var hourDiff = Math.abs(lunchoutArr[0] - startArr[0])+ Math.abs(finishArr[0]-lunchinArr[0]);
var minDiff = (Math.abs(lunchoutArr[1]-startArr[1])+ Math.abs(finishArr[1]-lunchinArr[1])/60*100);
if (minDiff.toString().length == 1)
    minDiff = '0' + minDiff;

var output = hourDiff + (minDiff/60);
event.value = output;

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
Most Valuable Participant ,
May 22, 2019

Copy link to clipboard

Copied

Yeah, you need to modify it quite a bit. Especially the lines where you calculate the hourDiff and minDiff variables.

You should break them up into smaller calculations and then you'll be able to check if the lunch fields are empty or not, before including the results in this formula.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
New Here ,
May 22, 2019

Copy link to clipboard

Copied

Thanks.  Took a stab at it: (I get an error that there's a missing ';' at line 15 but I'm not seeing the problem.

// start

var start = this.getField("Start1_1").value;

var startArr = start.split(":");

//lunchout

var lunchout = this.getField("LunchOut1").value;

var lunchoutArr = lunchout.split(":");

//lunchin

var lunchin = this.getField("LunchIn1").value;

var lunchinArr = lunchin.split(":");

// finish

var finish = this.getField("End1_1").value;

var finishArr = finish.split(":");

// difference in start/finish time

var hourWDiff = Math.abs(finishArr[0] - startArr[0]);

var minWDiff = finishArr[1] - startArr[1])/60*100);

//difference in lunchin/lunchout time

var hourLDiff = Math.abs(lunchoutArr[0] - lunchinArr[0]);

var minLDiff = (Math.abs(lunchoutArr[1] - lunchinArr[1])/60*100);

if (minWDiff.toString().length == 1)

    minWDiff = '0' + minWDiff;

if (minLDiff.toString().length == 1)

    minLDiff = '0' + minLDiff;

var totalHrs = hourWDiff + (minWDiff/60) + hourLDiff + (minLDiff/60);

var output = totalHrs;

event.value = output;

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
Most Valuable Participant ,
May 22, 2019

Copy link to clipboard

Copied

The problem is with this line:

var minWDiff = finishArr[1] - startArr[1])/60*100);

You're missing the opening parenthesis.

You still have the it too mixed up. Separate the part that calculates the lunch time entirely from the rest of the calculation.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 1
New Here ,
May 22, 2019

Copy link to clipboard

Copied

Thanks - I couldn't see that.

I'm not a javascript programmer and I sure appreciate your help. 

Do  you have time to suggest a solution?

// start

var start = this.getField("Start1_1").value;

var startArr = start.split(":");

//lunchout

var lunchout = this.getField("LunchOut1").value;

var lunchoutArr = lunchout.split(":");

//lunchin

var lunchin = this.getField("LunchIn1").value;

var lunchinArr = lunchin.split(":");

// finish

var finish = this.getField("End1_1").value;

var finishArr = finish.split(":");

// difference in start/finish time

var hourWDiff = Math.abs(finishArr[0] - startArr[0]);

var minWDiff = (Math.abs(finishArr[1] - startArr[1])/60*100);

//difference in lunchin/lunchout time

var hourLDiff = Math.abs(lunchoutArr[0] - lunchinArr[0]);

var minLDiff = (Math.abs(lunchoutArr[1] - lunchinArr[1])/60*100);

if (minWDiff.toString().length == 1)

    minWDiff = '0' + minWDiff;

if (minLDiff.toString().length == 1)

    minLDiff = '0' + minLDiff;

var totalHrs = hourWDiff + (minWDiff/60) + hourLDiff + (minLDiff/60);

var output = totalHrs;

event.value = output;

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
Most Valuable Participant ,
May 22, 2019

Copy link to clipboard

Copied

Try this:

var start = this.getField("Start1_1").value;

var finish = this.getField("End1_1").value;

if (start=="" || finish=="") event.value = "";

else {

    var lunchout = this.getField("LunchOut1").value;

    var lunchin = this.getField("LunchIn1").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/60) + hourLDiff + (minLDiff/60);

    event.value = totalHrs;

}

I removed some lines that seems incorrect to me, and fixed one or two other small issues, as well.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 1
New Here ,
May 22, 2019

Copy link to clipboard

Copied

Excellent! I just needed to change the ‘+’ to ‘-‘ in the totalHrs line at the end.

var totalHrs = hourWDiff + (minWDiff/60) - hourLDiff + (minLDiff/60);

Kudos : )

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
try67 LATEST
Most Valuable Participant ,
May 22, 2019

Copy link to clipboard

Copied

Well, that part I didn't change...

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 22, 2019 0
New Here ,
May 21, 2019

Copy link to clipboard

Copied

You are my new best friend!!! 

Thank you for saving me more time down the rat hole.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
May 21, 2019 0