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.

Validate Planned start date must be greater than 3 days from opened date

Evan2
Kilo Guru

Hello All,

How to restrict change requester to  raise a change request if  planned start date is less than 3 days from opened date. Currently I am able to raise change request for any date.

find_real_file.png

Regards,

Evan

1 ACCEPTED SOLUTION

Evan2
Kilo Guru

Hi All,

 

I have achieved this by below client scripts.

 

Client Script :

find_real_file.png

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue == '') {
return;
}


var cd=g_form.getValue('requested_by_date');
var sites = new GlideAjax('ClientDateTimeUtils');
sites.addParam('sysparm_name', 'getDayOfWeek');
sites.addParam('sysparm_locID', cd);
//sites.getXML(processResponse);
sites.getXMLWait();

var comDate = sites.getAnswer();
//alert(comDate);
if(g_form.getValue('type')=="Emergency")
{}
else
{
if(comDate == 6 || comDate== 7)
{
g_form.addErrorMessage('We dont work on weeends!');
g_form.setValue('requested_by_date','');
return false;
}
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0 ){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
//Type appropriate comment here, and begin script below
if(g_form.getValue('type') == "Routine"){
var rid = g_form.getValue('requested_by_date');
var opn = g_form.getValue('opened_at');

if (g_form.getValue('u_major_change') == 'Yes'){
var differenceLead = getDateDiffLeadTime(opn,rid);

if(differenceLead < 0 ){
g_form.addErrorMessage('Requested Implementaion Date should be 5 days ahead of the Opened date for Major Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}
}
else{
var differenceLead3 = getDateDiffLeadTime3(opn,rid);

if(differenceLead3 < 0){
g_form.addErrorMessage('Requested Implementaion Date should be 3 days ahead of the Opened date for Minor Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}



}





}
/*else{
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
}*/

}
}
//g_form.setValue('start_date', rid);

function getDateDiffLeadTime(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}
function compareDateToNow(date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiff');
ga.addParam('date_2',date_2);
ga.getXMLWait();
var comDate = ga.getAnswer();
return comDate;
}
function getDateDiffLeadTime3(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead3');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}

 

 

 

 

 

 

Script Include-1 (ClientDateTimeUtils)

 

var ClientDateTimeUtils = Class.create();
ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate();; //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime();; //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

//Returns the Day of Week
getDayOfWeek: function(){
var firstDT = this.getParameter('sysparm_locID'); // Date-Time Field
var day = GlideDateTime();
day.setValue(firstDT);
var dayofweek = day.getDayOfWeekLocalTime();
return dayofweek;
}


});

 

Script Include-2 (ABCDateTimeUtils)

 

var ABCDateTimeUtils = Class.create();
ABCDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate(); //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime(); //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

// Date Validation for Change Management Implementation Plan
getDateDiff: function() {

var date_1 = this.getParameter('date_1');
var date_2 = this.getParameter('date_2');
gs.log("date1 and date 2" + date_1 + "date 2" + date_2);
var sDeD = gs.dateDiff(date_1,date_2,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getConvertDate: function() {
var toptsk = this.getParameter('sysparm_chgStart');
var endDatetsk = this.getParameter('sysparm_funStartDate1');
//gs.log('ICC Change:toptsk&&endDatetsk'+toptsk+':::'+endDatetsk);

/*var temp = new Packages.java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
var cdt = toptsk;
cdt = temp.parse(cdt);
var output = new Packages.java.text.SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
var output1 = output.format(cdt);
var dateDiff = gs.dateDiff(output1,endDatetsk,true);*/
//var date1 = new GlideDateTime();
var year = toptsk.split('-')[0];
var month = toptsk.split('-')[1];
var dayTime = toptsk.split('-')[2];
var day = dayTime.split(' ')[0];
var time = dayTime.split(' ')[1];
var ndate= day + '-' + month + '-' + year + ' ' + time;
//gs.log("End Date" + ndate + "endDatetsk" + endDatetsk);

//gs.log('ICC Change:ndate&&endDatetsk'+ndate+':::'+endDatetsk);

/*var date1 = new GlideDateTime();
var date2 = new GlideDateTime();
date1.setDisplayValueInternal(ndate);
date2.setDisplayValueInternal(endDatetsk);*/
var diffSeconds = gs.dateDiff(ndate, endDatetsk,true);
//var diffSeconds = gs.dateDiff(ndate.getDisplayValue(), endDatetsk.getDisplayValue(),true);
//gs.log('ICC Change diffSeconds:'+diffSeconds);
return diffSeconds;
//return dateDiff;
},
getDateDiffLead: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(5);
rid.addDaysLocalTime(0);



var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getDateDiffLead3: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(3);
rid.addDaysLocalTime(0);


var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
});

 

 

This is working as expected. Below is the screenshot-

find_real_file.png

Regards,

Evan

View solution in original post

4 REPLIES 4

Mark Roethof
Tera Patron
Tera Patron

Hi there,

Have you considered using a (Catalog) UI Policy to achieve date validations? There's almost no-code needed to achieve date validations this way. Have a look at an article I wrote on this:
No Code date validations thru (Catalog) UI Policies

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Omkar Joshi
Giga Guru

Hi,

 

Use the below scripts,

 

 

client script: onChange()

 

 

var ga = new GlideAjax('global.UserData');
ga.addParam('sysparm_name', 'delievery_date');
ga.addParam('plannedeDate', g_form.getValue('planned_start_date'));//check fields names

ga.addParam('openedDate', g_form.getValue('opened_date')); //check fields names
ga.getXML(myCallBack);

function myCallBack(response) {
var greeting = response.responseXML.documentElement.getAttribute('answer');


var arr=greeting.split(' ');
g_form.hideErrorBox('u_om_delivery_date');
//alert(arr[0]);
if(arr[0]>3||arr[0].length>3)
{
//print error message

}
}

 

 

 

Add this function in the script include:

 

delievery_date : function(){
var plannedeDate= this.getParameter('plannedeDate');

var openedDate= this.getParameter('openedDate');


var plannedeDate1=new GlideDateTime(date);
var openedDate1=new GlideDateTime(openedDate);

var diff=gs.dateDiff(openedDate1,plannedeDate1,false);

return diff;
},

asifnoor
Kilo Patron

Hi,

create a catalog client script onchange on your planned start date field and add the below code.

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
    var selectedDateNum = getDateFromFormat(newValue,g_user_date_format); 
    var opened_dateNum = getDateFromFormat(g_form.getValue("opened_date"),g_user_date_format); //check variable name.
opened_dateNum = opened_dateNum-259200; //259200 equal to 3 days.
	if(selectedDateNum > opened_dateNum) {
		g_form.showFieldMsg('planned_start_date','Selected date cannot be greater than 3 days of opened date','error');
	} else {
		g_form.clearMessages();
	}   
}

Note: check the variable names.

Mark the comment as a correct answer and helpful if this helps.

Evan2
Kilo Guru

Hi All,

 

I have achieved this by below client scripts.

 

Client Script :

find_real_file.png

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue == '') {
return;
}


var cd=g_form.getValue('requested_by_date');
var sites = new GlideAjax('ClientDateTimeUtils');
sites.addParam('sysparm_name', 'getDayOfWeek');
sites.addParam('sysparm_locID', cd);
//sites.getXML(processResponse);
sites.getXMLWait();

var comDate = sites.getAnswer();
//alert(comDate);
if(g_form.getValue('type')=="Emergency")
{}
else
{
if(comDate == 6 || comDate== 7)
{
g_form.addErrorMessage('We dont work on weeends!');
g_form.setValue('requested_by_date','');
return false;
}
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0 ){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
//Type appropriate comment here, and begin script below
if(g_form.getValue('type') == "Routine"){
var rid = g_form.getValue('requested_by_date');
var opn = g_form.getValue('opened_at');

if (g_form.getValue('u_major_change') == 'Yes'){
var differenceLead = getDateDiffLeadTime(opn,rid);

if(differenceLead < 0 ){
g_form.addErrorMessage('Requested Implementaion Date should be 5 days ahead of the Opened date for Major Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}
}
else{
var differenceLead3 = getDateDiffLeadTime3(opn,rid);

if(differenceLead3 < 0){
g_form.addErrorMessage('Requested Implementaion Date should be 3 days ahead of the Opened date for Minor Change.If you want to expedite the change please raise a Emergency Change Request');
g_form.setValue('requested_by_date','');
return false;
}



}





}
/*else{
var compareDate2 = compareDateToNow(g_form.getValue('requested_by_date'));
if(compareDate2 < 0){
g_form.addErrorMessage('Please select only future date for Requested Implementation Date');
g_form.setValue('requested_by_date','');
return false;
}
}*/

}
}
//g_form.setValue('start_date', rid);

function getDateDiffLeadTime(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}
function compareDateToNow(date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiff');
ga.addParam('date_2',date_2);
ga.getXMLWait();
var comDate = ga.getAnswer();
return comDate;
}
function getDateDiffLeadTime3(date_1, date_2){
var ga = new GlideAjax('ABCDateTimeUtils');
ga.addParam('sysparm_name','getDateDiffLead3');
ga.addParam('date_1',date_1);
ga.addParam('date_2',date_2);
ga.getXMLWait();
var d1 = ga.getAnswer();
return d1;
}

 

 

 

 

 

 

Script Include-1 (ClientDateTimeUtils)

 

var ClientDateTimeUtils = Class.create();
ClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate();; //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime();; //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

//Returns the Day of Week
getDayOfWeek: function(){
var firstDT = this.getParameter('sysparm_locID'); // Date-Time Field
var day = GlideDateTime();
day.setValue(firstDT);
var dayofweek = day.getDayOfWeekLocalTime();
return dayofweek;
}


});

 

Script Include-2 (ABCDateTimeUtils)

 

var ABCDateTimeUtils = Class.create();
ABCDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

//Takes a Single Date/Time Field and returns its time difference from nowDateTime().
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getNowDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(gs.nowDateTime(), firstDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getNowDateTimeDiff: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Diff the amount of time between two different Date/Time fields
//params = sysparm_fdt (the first date/time field), sysparm_sdt (second date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeDiff: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var secondDT = this.getParameter('sysparm_sdt'); // Second Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, secondDT, true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeDiff: FIRST DT: " + firstDT + " -SECOND DT: " + secondDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Takes your date/time field and returns the amount of time before now. A positive is time before now, a negative number is after now.
//params = sysparm_fdt (the first date/time field), sysparm_difftype (time based format to return result. See "_calcDateDiff" function comments)
getDateTimeBeforeNow: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diffTYPE = this.getParameter('sysparm_difftype'); // Date-Time Type to return the answer as. Can be second, minute, hour, day
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var timediff = this._calcDateDiff(diffTYPE, diff);
//return "getDateTimeBeforeNow: FIRST DT: " + firstDT + " -DIFFTYPE: " + diffTYPE + " -TIME DIFF: " + timediff;
return timediff;
},

//Returns true if it is before now, and false if it is after now.
//params = sysparm_fdt (the first date/time field)
getDateTimeBeforeNowBool: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var diff = gs.dateDiff(firstDT, gs.nowDateTime(), true);
var answer = '';
if (diff >= 0){answer = 'true';}
else {answer = 'false';}
return answer;
},

//Returns the Date/Time of right now.
getNowDateTime: function(){
var now = gs.nowDateTime(); //Now Date/Time
return now;
},

//Returns the Date right now.
getNowDate: function(){
var now = GlideDate(); //Now Date
return now.getLocalDate();
},

//Returns the Time of right now.
getNowTime: function(){
var now = GlideTime(); //Now Time
var modnow = now.getLocalTime().toString().split(' ');
return modnow[1];
},

//Takes a date/time field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - second, minute, hour, day, week, month, year), sysparm_addtime (amount of time to add based on the type).
addDateTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - second (addSeconds()), minute (need to add conversion), hour (need to add conversion), day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDateTime(firstDT);

if(addTYPE == 'second'){day.addSeconds(addTIME);}
else if (addTYPE == 'minute'){day.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){day.addSeconds(addTIME*(60*60));}
else if (addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

//Takes a glide date field and adds time to it.
//params = sysparm_fdt (the first date/time field), sysparm_addtype (type of time to add - day, week, month, year),sysparm_addtime (amount of time to add based on the type).
addDateAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date Field
var addTYPE = this.getParameter('sysparm_addtype'); //What to add - day (addDays()), week (addWeeks()), month (addMonths()), year (addYears())
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var day = GlideDate();
day.setValue(firstDT);

if(addTYPE == 'day'){day.addDays(addTIME);}
else if (addTYPE == 'week'){day.addWeeks(addTIME);}
else if (addTYPE == 'month'){day.addMonths(addTIME);}
else if (addTYPE == 'year'){day.addYears(addTIME);}
else {day.addDays(addTIME);}

//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + day;
return day;
},

addTimeAmount: function(){
var firstDT = this.getParameter('sysparm_fdt'); //First Date-Time Field
var addTYPE = this.getParameter('sysparm_addtype'); //What
var addTIME = this.getParameter('sysparm_addtime'); //How much time to add
var time = GlideTime();
time.setValue(firstDT);

if(addTYPE == 'second'){time.addSeconds(addTIME);}
else if (addTYPE == 'minute'){time.addSeconds(addTIME*60);}
else if (addTYPE == 'hour'){time.addSeconds(addTIME*(60*60));}
else {time.addSeconds(addTIME);}

var modtime = time.toString().split(' ');
//return "First Date: " + firstDT + " -Time to Add: " + addTIME + " -Add Type: " + addTYPE + " -Added Time: " + time;
return modtime[1];
},

//Private function to calculate the date difference return result in second, minute, hour, day.
_calcDateDiff: function(diffTYPE, seconds){
var thisdiff;
if (diffTYPE == "day"){thisdiff = seconds/86400;}
else if (diffTYPE == "hour"){thisdiff = seconds/3600;}
else if (diffTYPE == "minute"){thisdiff = seconds/60;}
else if (diffTYPE == "second"){thisdiff = seconds;}
else {thisdiff = seconds;}
return thisdiff;
},

// Date Validation for Change Management Implementation Plan
getDateDiff: function() {

var date_1 = this.getParameter('date_1');
var date_2 = this.getParameter('date_2');
gs.log("date1 and date 2" + date_1 + "date 2" + date_2);
var sDeD = gs.dateDiff(date_1,date_2,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getConvertDate: function() {
var toptsk = this.getParameter('sysparm_chgStart');
var endDatetsk = this.getParameter('sysparm_funStartDate1');
//gs.log('ICC Change:toptsk&&endDatetsk'+toptsk+':::'+endDatetsk);

/*var temp = new Packages.java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
var cdt = toptsk;
cdt = temp.parse(cdt);
var output = new Packages.java.text.SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
var output1 = output.format(cdt);
var dateDiff = gs.dateDiff(output1,endDatetsk,true);*/
//var date1 = new GlideDateTime();
var year = toptsk.split('-')[0];
var month = toptsk.split('-')[1];
var dayTime = toptsk.split('-')[2];
var day = dayTime.split(' ')[0];
var time = dayTime.split(' ')[1];
var ndate= day + '-' + month + '-' + year + ' ' + time;
//gs.log("End Date" + ndate + "endDatetsk" + endDatetsk);

//gs.log('ICC Change:ndate&&endDatetsk'+ndate+':::'+endDatetsk);

/*var date1 = new GlideDateTime();
var date2 = new GlideDateTime();
date1.setDisplayValueInternal(ndate);
date2.setDisplayValueInternal(endDatetsk);*/
var diffSeconds = gs.dateDiff(ndate, endDatetsk,true);
//var diffSeconds = gs.dateDiff(ndate.getDisplayValue(), endDatetsk.getDisplayValue(),true);
//gs.log('ICC Change diffSeconds:'+diffSeconds);
return diffSeconds;
//return dateDiff;
},
getDateDiffLead: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(5);
rid.addDaysLocalTime(0);



var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
getDateDiffLead3: function() {
var date_1 = new GlideDateTime();
var date_2 = new GlideDateTime();
date_1 = this.getParameter('date_1');
date_2 = this.getParameter('date_2');
var date_1Split = date_1.split(" ");
var datePart = date_1Split[0].split("-");
var Date1AfterSplit = datePart[2] + '-' + datePart[1] + '-' + datePart[0] + " " + date_1Split[1];

var date_2Split = date_2.split(" ");
var datePart2 = date_2Split[0].split("-");
var Date2AfterSplit = datePart2[2] + '-' + datePart2[1] + '-' + datePart2[0] + " " + date_2Split[1];

gs.log("First date" + Date1AfterSplit + "Second Date" + Date2AfterSplit);
var opnlead = new GlideDateTime(Date1AfterSplit);

var rid = new GlideDateTime(Date2AfterSplit);
//rid.setValueUTC(rid);
opnlead.addDaysLocalTime(3);
rid.addDaysLocalTime(0);


var sDeD = gs.dateDiff(opnlead,rid,true);
gs.log('getDateDiff retuning value:'+sDeD);
return sDeD;
},
});

 

 

This is working as expected. Below is the screenshot-

find_real_file.png

Regards,

Evan