- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-10-2019 01:11 AM
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.
Regards,
Evan
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-11-2019 12:17 AM
Hi All,
I have achieved this by below client scripts.
Client Script :
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-
Regards,
Evan

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-10-2019 01:26 AM
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-10-2019 01:47 AM
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;
},

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-10-2019 01:47 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-11-2019 12:17 AM
Hi All,
I have achieved this by below client scripts.
Client Script :
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-
Regards,
Evan