
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2020 05:54 PM
I am working on functionality as below
I have two fields on catalog item includes – start date and end date. We do not want users to select end date not more than 6 months from start date.
For example: start date = 07/22/2020
If End date = 1/22/2021 (technically difference is more than 180 days because of few months has 31 days ).
Let us say if end user selects 1/23/2021 as end date, then I should alert them saying not to select as it is more than 6 months calendar days.
I would really appreciate your help.
Thanks
Lakshman
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-22-2020 08:58 AM
Below worked for me:
1) If start date is 22nd July then adding 6months to that is 22nd Jan
2) Now it depends on how 6 months you consider since some months are having 30 and 31 days.
3) I would request to check with business for exact days and that would be better.
a) So if user gives 23rd Jan then it gives alert and clears as it is not valid
b) If user gives 22nd Jan then it is ok
Client Script:
Note: Ensure you give valid variable names for start and end dates
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('DateTimeAjax');
ga.addParam('sysparm_name', "compareDates");
ga.addParam('sysparm_start', g_form.getValue('start_date')); // start variable
ga.addParam('sysparm_end', g_form.getValue('end_date')); // end variable
ga.getXMLAnswer(function(answer){
if(answer != ''){
alert('End date should be within 6 months from start date');
g_form.clearValue('end');
}
});
//Type appropriate comment here, and begin script below
}
Script Include: It should be client callable
var DateTimeAjax = Class.create();
DateTimeAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
compareDates: function(){
var start = new GlideDateTime(this.getParameter('sysparm_start'));
var end = new GlideDateTime(this.getParameter('sysparm_end'));
start.addMonthsUTC(6);
if(end.getNumericValue() > start.getNumericValue()){
return 'End Date should be withing 6 months from start';
}
return '';
},
type: 'DateTimeAjax'
});
Output:
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-22-2020 05:43 AM
Naveen,
Still the same issue -- getting Null from script include.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-22-2020 06:02 AM
can you share the code because it is working fine for me with following code
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
var ga = new GlideAjax('ScriptIncludeName');
ga.addParam('sysparm_name', 'addMonths');
ga.addParam('start_date', g_form.getValue('start_date'));
ga.addParam('months_to_add', 6);
ga.getXML(getEndDate);
}
function getEndDate(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
if (answer) {
if (g_form.getValue('end_date') > answer) {
alert("End date should be less than " + answer);
}
}
}
var ScriptIncludeName = Class.create();
ScriptIncludeName.prototype = Object.extendsObject(AbstractAjaxProcessor, {
addMonths: function() {
var start_date = this.getParameter('start_date');
var months = this.getParameter('months_to_add');
var gdt = new GlideDateTime(start_date);
gdt.addMonths(months);
return gdt.getDate();
},
type: 'ScriptIncludeName'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2020 08:00 PM
Hey Lakshman,
Check out this threads, it will help you:
Mark Correct and Helpful if it helps!!!
Best Regards,
Namrata.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2020 09:59 PM
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
Scripting data validations is a poor choice and in most cases unnecessary.
If my answer helped you in any way, please then mark it as helpful.
Kind regards,
Mark
2020 ServiceNow Community MVP
2020 ServiceNow Developer MVP
---
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
07-22-2020 05:56 AM
Any luck on this? Any questions?
If my answer helped you in any way, please then mark it as helpful.
Kind regards,
Mark
2020 ServiceNow Community MVP
2020 ServiceNow Developer MVP
---
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