How to find the date difference via client script in agent workspace

roshini1
Kilo Guru

I am having two fields start date and end date in my form and am trying to check whether the end date is less than start date, if yes it should throw and error. The script that i wrote is working in native view, but not in agent workspace.
Can someone help me out

var start_date = g_form.getValue("u_outage_start_date");
var end_date = g_form.getValue("u_outage_end_date");
var format = g_user_date_time_format;
var isEndBeforeStart = compareDates(start_date, format, end_date, format);
if (isEndBeforeStart){
g_form.clearValue("u_outage_end_date");
g_form.showFieldMsg("u_outage_end_date", "Outage End Date should be after Outage Start Date", "error");
}

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

g_user_date_time_format seems not allowed in workspace

you can use GlideAjax

Regards
Ankur

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

View solution in original post

10 REPLIES 10

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

g_user_date_time_format seems not allowed in workspace

you can use GlideAjax

Regards
Ankur

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

Hi Ankur,

I tried with script include,but i guess,since am working in scoped application datediff is not working. Is there any alternative to use here. 

script include

getDateDiff: function() {
var date_1 = this.getParameter('date_1');
var date_2 = this.getParameter('date_2');
return gs.dateDiff(date_1, date_2, true);
},


Client script

var fromDate = g_form.getValue('u_outage_start_date'),
toDate = g_form.getValue('u_outage_end_date');


var ga = new GlideAjax('Date_check');
ga.addParam('sysparm_name', 'getDateDiff');
ga.addParam('date_1', fromDate);
ga.addParam('date_2', toDate);
ga.getXML(validateDates);

}
function validateDates(response) {
var difference = response.responseXML.documentElement.getAttribute("answer");
if (difference < 0) {
g_form.addErrorMessage(getMessage("Outage End Date should be after Outage Start Date"));
g_form.clearValue('u_outage_end_date');
}

Hello,

 

Please try below code, this is the alternative:

 

var t = new GlideDateTime();
var f = new GlideDateTime('2019-04-08 16:43:33');
var dur = GlideDateTime.subtract(t, f);

var duration = dur.getNumericValue();
var durationSeconds = (duration/1000);

gs.info(t);
gs.info(dur.getDisplayValue());
gs.info(durationSeconds );

 

ALso please check this article:

https://community.servicenow.com/community?id=community_blog&sys_id=72b0f06adb3d33801cd8a345ca96194d

Please let me know if this solves your query.

 

Thanks

 

@roshini 

Hi,

you just want to check if end is more than start then no need of difference

getDateDiff: function() {
var date_1 = new GlideDateTime(this.getParameter('date_1'));
var date_2 = new GlideDateTime(this.getParameter('date_2'));
	
	if(date_1.getNumericValue() < date_2.getNumericValue())
		return 'error';
	else
		return '';
}

client script

var fromDate = g_form.getValue('u_outage_start_date'),
toDate = g_form.getValue('u_outage_end_date');


var ga = new GlideAjax('Date_check');
ga.addParam('sysparm_name', 'getDateDiff');
ga.addParam('date_1', fromDate);
ga.addParam('date_2', toDate);
ga.getXML(validateDates);

}
function validateDates(response) {
	var difference = response.responseXML.documentElement.getAttribute("answer");
	if (difference == 'error') {
		g_form.addErrorMessage(getMessage("Outage End Date should be after Outage Start Date"));
		g_form.clearValue('u_outage_end_date');
	}

Regards
Ankur

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

Hello Ankur,

I found your code very useful. But if I subtract the Numeric values of date_1 and date_2, how would i convert that difference to days?

Thanks in advance.

Regards,

Sarah