Link in Zwischenablage kopieren
Kopiert
Hi I am new in this field. I have created a worksheet in EXCEL that calculates total hours worked. It is working both for day time or midnight time. See screenshot.
I want to create the similar workshet in ADOBE Acrobat PDF Form. I have tried many scripts from here but wsn't successful.
Say I have two fields, "Time In" and "Time Out", Kindly help me how I can do this?
Time calculated should be in HH:MM format.
Your help means a lot to me.
Thans & Regards,
Muasher
Use this code as a doc-level script:
function calcTimeDiff(startFieldName, endFieldName) {
var startField = this.getField(startFieldName);
var start = startField.valueAsString;
var endField = this.getField(endFieldName);
var end = endField.valueAsString;
if (start=="" || end=="") event.value = "";
else {
var startArr = start.split(":") ;
var finishArr = end.split(":") ;
var hourDiff = Number(finishArr[0]) - Number(startArr[0]);
var minDiff = Number(finishArr[1]) - Number(startA
...
Link in Zwischenablage kopieren
Kopiert
Hi,
Hopefully, this can help, if you are ablet o get a script running but it is not quite correct, then you can post that script and what is not working for you and we can investigate.
Link in Zwischenablage kopieren
Kopiert
Thanks for the response. But I have applied this code but stil it counts time in decimals. The code I used in Calculate< Custom Calculation Script is,
var start = this.getField("Time 3.1").valueAsString;
var finish = this.getField("Time 4.1").valueAsString;
if (start=="" || finish=="") event.value = "";
else {
var startArr = start.split(":") ;
var finishArr = finish.split(":") ;
var hourDiff = finishArr[0] - startArr[0];
var minDiff = Math.floor(((finishArr[1] - startArr[1]) / 60)*100);
if (minDiff<0) {hourDiff--; minDiff += 100;}
if (hourDiff<0) hourDiff+=24;
if (minDiff.toString().length == 1) minDiff = '0' + minDiff;
event.value = hourDiff + "." + minDiff;
}
var nHrs = Math.floor(nElapsed / 60); // whole hours;
// elapsed minutes
var nMins = nElapsed % 60; // remainder minutes;
// format into hours and minutes;
event.value = util.printf("%,101.0f:%,102.0f", nHrs, nMins);
Link in Zwischenablage kopieren
Kopiert
At util.printf you uses the format for floating numbers.
Link in Zwischenablage kopieren
Kopiert
What i should use then? Kindly guide me please
Link in Zwischenablage kopieren
Kopiert
Use %02d
Link in Zwischenablage kopieren
Kopiert
%02D for both?
Link in Zwischenablage kopieren
Kopiert
%02d for both
Link in Zwischenablage kopieren
Kopiert
It is still the same. May be i am doing a mistake. Can you please write this line as I need to add in the form.
event.value = util.printf("%,101.0f:%,102.0f", nHrs, nMins);
Link in Zwischenablage kopieren
Kopiert
Replace
"%,101.0f:%,102.0f"
with
"%02d:%02d"
Link in Zwischenablage kopieren
Kopiert
It's still the same like 1.25 instead of 1:15
Link in Zwischenablage kopieren
Kopiert
May be there is something wrong with the calculation.
Check the Javascript console for errors.
Link in Zwischenablage kopieren
Kopiert
No error is detected.
Link in Zwischenablage kopieren
Kopiert
Link in Zwischenablage kopieren
Kopiert
I get following error:
ReferenceError: nElapsed is not defined
16:Field:Calculate
Link in Zwischenablage kopieren
Kopiert
May be I am not that much good, can you please correct this code in the file attached above and send to me please?
Link in Zwischenablage kopieren
Kopiert
You must set a value for nElapsed .
Link in Zwischenablage kopieren
Kopiert
How?
Link in Zwischenablage kopieren
Kopiert
What value want you use for this?
Link in Zwischenablage kopieren
Kopiert
I want a result with HH:MM format. For example if I write Time in 02:00 and Timr Out 04:00 the Total Time should result as 02:00 not 2.0
Link in Zwischenablage kopieren
Kopiert
Use this code as a doc-level script:
function calcTimeDiff(startFieldName, endFieldName) {
var startField = this.getField(startFieldName);
var start = startField.valueAsString;
var endField = this.getField(endFieldName);
var end = endField.valueAsString;
if (start=="" || end=="") event.value = "";
else {
var startArr = start.split(":") ;
var finishArr = end.split(":") ;
var hourDiff = Number(finishArr[0]) - Number(startArr[0]);
var minDiff = Number(finishArr[1]) - Number(startArr[1]);
if (minDiff<0) {hourDiff--; minDiff += 60;}
var minDiffString = minDiff.toString();
if (minDiffString.length==1) minDiffString = "0" + minDiffString;
event.value = hourDiff + ":" + minDiffString;
}
}
Then call it like this (for example):
calcTimeDiff("D5", "E5");
Link in Zwischenablage kopieren
Kopiert
Thank you so much Brother!
Link in Zwischenablage kopieren
Kopiert
Can we make it to define day or night like AM or PM?
Link in Zwischenablage kopieren
Kopiert
Yes, that's possible, but you keep asking for more and more changes, requiring us to continually change the script you've been given. At a certain point you'll exhaust the good-will you're getting here and will either be asked to learn how to code for yourself, or pay for the help you're getting...
This is the last change I will be providing like this:
function calcTimeDiff2(startFieldName, endFieldName) {
var startField = this.getField(startFieldName);
var start = startField.valueAsString;
var endField = this.getField(endFieldName);
var end = endField.valueAsString;
if (start=="" || end=="") event.value = "";
else {
var hourInMs = 3600000;
var startTimeDate = util.scand("mm/dd/yyyy hh:MM tt", "01/01/2022 " + start);
var endTimeDate = util.scand("mm/dd/yyyy hh:MM tt", "01/01/2022 " + end);
var timeDiffInHours = (endTimeDate.getTime()-startTimeDate.getTime()) / hourInMs;
event.value = timeDiffInHours.toFixed(2);
}
}
calcTimeDiff2("D5", "E5");
Link in Zwischenablage kopieren
Kopiert
Thanks Brother, this was the last change I needed. Thank you so much for help!