Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to set Calculated Value for Duration (or any other date/time) field

Valon Sheremeti
Kilo Guru

Hi,

I am unsuccessfully trying to dynamically set/calculate 'duration' field value based on difference between opened_at and closed_at fields   in an scoped application.

I tried using script below for 'calculated value' but no luck.

Thanks in advance.

(function calculatedFieldValue(current) {

var startDate = current.opened_at;  

var endDate = current.closed_at;  

var duration = GlideDateTime.subtract(startDate, endDate);

return duration;

})(current);

I tried also:

return GlideDateTime.substract(opened_at,closed_at);

but no luck - -my calculated field show <empty> value.

Thank you.

1 ACCEPTED SOLUTION

Can we try something like this


(function calculatedFieldValue(current) {

var startDate = new GlideDateTime(current.opened_at);


var endDate = new GlideDateTime(current.closed_at);


var duration = GlideDateTime.subtract(startDate, endDate);  


return duration.getDisplayValue();


})(current);



Please mark my response as correct and helpful if it helped solved your question.
-Thanks

View solution in original post

20 REPLIES 20

Thanks so much Prateek,


That worked!




However, I am having issues calculating duration correctly when endDate variable is <empty>


Any idea how to overcome that? I.e. by setting endDate variable to today's date? But, don't know how to do that?


Thanks again


Hello Valon


Try this



(function calculatedFieldValue(current) {


            var startDate = new GlideDateTime(current.opened_at);


      var endDate = new GlideDateTime(current.closed_at);


      if(endDate == ''){


              var today = new GlideDateTime();


              var result = GlideDateTime.subtract(startDate, today);


              return result.getDisplayValue();


      }


      else{


              var duration = GlideDateTime.subtract(startDate, endDate);


              return duration.getDisplayValue();


      }  


})(current);



Please mark my response as correct and helpful if it helped solved your question.
-Thanks

That worked !!!


Thanks so much.


V.


Glad that it worked for you


Cheers!



Please mark my response as correct and helpful if it helped solved your question.
-Thanks

Hello Prateek,


I used the same script but experiencing errors. Your input is appreciated.


Scripts:
(function calculatedFieldValue(current) {
var startDate = new GlideDateTime(current.u_today_s_date);
var endDate = new GlideDateTime(current.u_rca_due_date);
      if(endDate == ''){
              var today = new GlideDateTime();
              var result = GlideDateTime.subtract(startDate, today);
              return result.getDisplayValue();
      }
      else{
              var duration = GlideDateTime.subtract(startDate, endDate);
              return duration.getDisplayValue();
      }  
})(current);
return '';   // return the calculated value
})(current);
----------------------------------------------------------------
Evaluator: org.mozilla.javascript.EcmaError: Cannot read property "u_today_s_date" from null
    Caused by error in script at line 4


        Here is my configuration & date:


find_real_file.png