Calculate end date using start date + duration

Jake Sadler
Kilo Sage

I am trying to calculate the end date using start date + duration but I am struggling as the duration is 01-01-1970 it is giving me the seconds since then and I can't add them to the Start date to get the end date. Any help would be much appreciated..

 

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

you can use this script to add duration to start date

something like this in server side

var gdt = new GlideDateTime(current.start_date.getDisplayValue());
var ms = current.u_dation.dateNumericValue();
gdt.add(ms);
current.end_date = gdt.getValue();

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

5 REPLIES 5

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

you can use this script to add duration to start date

something like this in server side

var gdt = new GlideDateTime(current.start_date.getDisplayValue());
var ms = current.u_dation.dateNumericValue();
gdt.add(ms);
current.end_date = gdt.getValue();

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hi, When I do this, the duration (var ms) comes back as 36000000 seconds. So when I add that to the start date, the end date is set to 30 years in the future.

Can you share complete script?

Ideally it should work fine

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hi @Ankur Bawiskar 

https://community.servicenow.com/community?id=community_question&sys_id=7678f2efdb514110019ac2230596196a

1. In Knowledge Base the article validity is (ex:1825 = 5years / 2yrs) so article validity populate to Valid to date in Knowledge article to 5 yrs . i have written logic i can add more than 30 days . so(1825+30 days i can add) if i am try to add more than that it should print date in alert .user should select less than yyyy-mm-dd.

i tried printing months it is working as per below script i want print date instead of months

2. if article validity is empty by default valid to date is 2100-01-01 in these case it should print alert from current date to 1year +30= 395 days

below script is i tried for months can anyone help me for date

client script :

function onSubmit() {
//Type appropriate comment here, and begin script below

if (g_scratchpad.isFormValid){
return true;
}

var actionName = g_form.getActionName();

var ga = new GlideAjax('KnowledgeTimeDifference');
ga.addParam('sysparm_name','getDiff');

ga.addParam('sysparm_sysid',g_form.getValue('kb_knowledge_base'));
ga.addParam('sysparm_start',g_form.getValue('valid_to'));

ga.getXMLAnswer(function(answer) {
answer = JSON.parse(answer);

if(answer.status == false)
{
alert("Please select the Valid to date less than "+answer.days+" months greater than today's date");
}
else
{
g_scratchpad.isFormValid = true;
g_form.submit(actionName);
}


});

return false;

}

script include:

var KnowledgeTimeDifference = Class.create();
KnowledgeTimeDifference.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDiff: function() {

var arval = '';
//var stDateVar;
var sysid = this.getParameter('sysparm_sysid');

var gr = new GlideRecord('kb_knowledge_base');
gr.addQuery('sys_id', sysid);
gr.query();

if (gr.next()) {
arval = gr.getValue('article_validity');
}
if (arval == null) {
arval = '0';

}

var gdt1 = new GlideDateTime();
gdt1.addDaysUTC(parseInt(arval) + 30);

var days = 0;

if (arval == '0') {
days = 13;//yyyy-mm-dd


} else {
days = Math.round((parseInt(arval) + 30) / 30);

}


var start = this.getParameter('sysparm_start');
var gdt2 = new GlideDateTime(start);

var dur = GlideDateTime.subtract(gdt1, gdt2);
var date = new GlideDate();
date.setValue(gdt2);
date.addMonths(days);
var dif = dur.getNumericValue();
var js = {};

if (dif <= 0) {

js.status = true;
} else {
js.days = days;
js.status = false;
}

return JSON.stringify(js);


},

 

type: 'KnowledgeTimeDifference'
});