How to calculate difference between two dates in hours ?

coolsaurabh
Tera Contributor

How to calculate difference between two dates in hours ?

1 ACCEPTED SOLUTION

markus_schaer
Tera Guru

Hi Sourabh



Here is an example on how to get the difference between two GlideDateTime objects and convert the result to hours:



var start = new GlideDateTime("2016-08-28 09:00:00");


var end = new GlideDateTime("2016-08-31 08:10:00");



// Duration in hours


var dur_seconds = gs.dateDiff(start, end, true); // returns the number of seconds as String


var dur_hours = Math.round(dur_seconds / 3600); // Math.round() is optional and will round the number to the nearest integer


gs.print(dur_hours); // *** Script: 71



This is a second example with the dedicated class GlideDuration. This class does not have a function to calculate hours (only days), but it can be useful to work with durations in general:



var start = new GlideDateTime("2016-08-28 09:00:00");


var end = new GlideDateTime("2016-08-31 08:10:00");



// Duration in days


var dur = GlideDateTime.subtract(start, end); // returns a GlideDuration object


gs.print(dur.getDisplayValue()); // *** Script: 2 Days 23 Hours 10 Minutes


gs.print(dur.getDayPart()); // *** Script: 2


gs.print(dur.getRoundedDayPart()); // *** Script: 3



Best regards


Markus


View solution in original post

11 REPLIES 11

Hi Markus,



Thanks a lot for your response. It providing time in seconds in proper way. But in hours it is not calculating properly.


  1. var dur_seconds = gs.dateDiff(start, end, true); // returns a String  
  2. var dur_hours = Math.round(dur_seconds / 60 / 60);  
  3. gs.print(dur_hours);

In above part if dur_seconds = 2400 second


then dur_hours = 1


while it should provide 2400/60/60 = 2/3 = .66



Please help.



Thanks,


Sourabh


Try changing "(dur_seconds / 60 / 60)" to "(dur_seconds / 3600)"



Also, if you're doing "Math.round()" then .66 rounded = 1.


Hi Dave,



Yes , "Math.round()" then .66 rounded = 1.


Which function should I used to get value decimal format that .66 form.



Thanks,


Sourabh


Hi Sourabh



Do you need a specific number of decimals? Otherwise you can just remove the "Math.round()" function.



var dur_seconds = 2400;


var dur_hours = dur_seconds / 3600;


gs.print(dur_hours); // *** Script: 0.6666666666666666



The example above is updated.



Best regards


Markus


Possibly parseFloat() - check the Javascript documentation for the Math and Number classes.