Time Calculation

Hey People, I have a lil problem here, I am calculating the No. of hours between 2 specific time intervals and adding them together. for eg. Day 1 No. of hours is 5.24 Day 1 No. of hours is 5.24 Day 1 No. of hours is 5.24 ------- Total 15.72 instead of 16.12 Is there any way to get this right. Regards Vishal

In Navision time is a decimal value. The 0.24 value doesn’t mean 24 minutes but 24/100 hour. So, the total of 15.72 is correct.

Hi Peter, I know its correct, but then how do I get around working with this, is there any way, I get hours by deducting 2 time values, for instance a Check in and a Check out time, so the work duration I get is 5.24 hours Vishal

Are the Check in and Check out times in HH:MM or in decimal hours? Are these times stored in a Navision time field?

Hi Peter, The Check in / Check Out is stored in HH:MM:SS format, the deduction gives an a Decimal hours Regards Vishal

Formatting the result might work. I never did that for a time so can’t help you there.

Hi, So then should I believe that there is no work around to this problem…if there I would like to make a request to the Guru’s here, if they could help me out with this problem… Best Regards Vishal

Hi Vishal, I think it’s not so difficult to write a function, which adds one time to another. All you need is to think a little :slight_smile:

If you’re working in 3.60 you might consider using the new datatypes DATETIME and DURATION.

Hi Jack, I am aware that 3.6 has this feature, but unfortunately I am working on 3.10. Any other suggestions Vishal

Hi Vishal, I guess these couple of lines should give you some ideas… Variables: CheckIn Time CheckOUt Time DiffHour Decimal DiffMin Decimal DiffTot Decimal

CheckIn := 070000T;
CheckOUt := 082400T;

//DiffTot in Minutes
DiffTot := (CheckOUt - CheckIn) / (60 * 1000);
DiffHour := ROUND(DiffTot/60,1);
DiffMin := (DiffTot MOD 60);

//DiffTot in decimal hours
DiffTot := (CheckOUt - CheckIn) / (60 * 60 * 1000);
DiffHour := ROUND(DiffTot,1);
DiffMin := (DiffTot - DiffHour) * 60;

You need to make sure from the beginning that the difference between CheckIn and CheckOut get calculated in the correct format… Saludos Nils

Hi Nils, Thanx a ton for the help that you have extended, but if you give value as 080000T to Checkin and 174500tT to Check out the Difftot value u get is 9.75 which is again wrong, as minutes cannot be 75 isnt it you get the DiffMin value as -45 which is correct. But then how would you get 9.45 which is the actual time difference between CheckIn & CheckOut. Iam totalling the values in a report, can definately use a variable to do that but then its not working as its expected to. It aint working…:frowning: Regards Vishal

Vishal, you need to handle the difference in decimal values, because this way you can perform calculations with the time differences more easily - therefore 9,75 is correct. If later on you want to show these time differences on reports of forms, use the last two lines of the code I posted beforehand to adapt the format to HH:MM or handle these two values in seperate fields, basically convert the 0.75 into 45… Saludos Nils

Hi, there is a more easily way, as I think. As example I get your beforehand example. Day 1 No. of hours is 5.24 Day 1 No. of hours is 5.24 Day 1 No. of hours is 5.24 ------- Total 15.72 This value is in decimal. If you want this in HH:MM, just do this: transform 15.72 back to miliseconds: dec_ms := (15.72 * 60 * 60 * 1000) and finally time := 000000T + dec_ms; Now ‘time’ is: 15:43:12;