We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Restrict end date to be after start date

gnunez
Kilo Guru

Hello all,

I have a script that I got from another thread to restrict the end date to be selected after the start date.

My issue is that it doesn't allow users to select the present date so I want to see if it is possible to exclude past dates but only after the present date.

For example: 

Start Date 12/25/18

End Date 12/25/18 (it should exclude 12/24/18 and anything before that)

 

My Catalog Client Script below:

Type: onChange

function onChange(control, oldValue, newValue, isLoading)
{
if(isLoading)
{
return;
}
//start the validation

if(newValue != '')
{
var ga = new GlideAjax('ConfirmDate');
ga.addParam('sysparm_name', 'chkCurrDate');
ga.addParam('sysparm_date',g_form.getValue('end_vacation'));
ga.getXML(NewParse);
}
function NewParse(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
if(answer == 'false'){
alert("Date selected is a past entry.");
g_form.setValue('end_vacation', ''); // Setting the variable as empty
}}}

8 REPLIES 8

Thank you Jon I'm going to give it a try. Just to make sure when replacing your placeholders with my field names, I see CompareValue and CompareName this is where I would specify start date and end date right? or do I need a ui script for each?

Thanks,

grace

I have the below not sure if I'm doing it right:

function ValidateDateGreaterThanOtherDate(StartDate, start_vacation, EndVacation, end_vacation, EndDate) {

var Format = g_user_date_format;

if (StartDate == '') {
g_form.clearValue(EndVacation);
g_form.showFieldMsg(EndVacation, start_vacation + ' must be entered before ' + EndVacation, 'error', true);

}
else {
g_form.hideFieldMsg(TheField);

var StartDateNum = getDateFromFormat(start_vacation, Format);
var EndVacationNum = getDateFromFormat(end_vacation, Format);

if (EndVacationNum < StartVacationNum) {
g_form.clearValue(end_vacation);
g_form.showFieldMsg(end_vacation, EndDate + ' must be later than ' + StartDate, 'error', true);

}
else
g_form.hideFieldMsg(EndDate);
}
}

jonmulherin
Giga Expert

There is just one UI Script involved in validating the end date is after the start date.  I have another to check to ensure the start date is not before the current date.

 

CompareValue is the value of start_date you’re passing in.  TheField is the name of the end_date field.  TheValue is the value of end_date.

 

You actually could have left the variable names the same in the UI script.  What matters is what you're passing in from the catalog client script

 

In your script above:     else { g_form.hideFieldMsg(TheField);  should be hiding EndVacation as there is no TheField variable declared.

 

This line should be using StartDate - var StartDateNum = getDateFromFormat(start_vacation, Format);

 

Both of the following should be using EndVacation

g_form.clearValue(end_vacation);
g_form.showFieldMsg(end_vacation, EndDate + ' must be later than ' + StartDate, 'error', true);

 

else
g_form.hideFieldMsg(EndDate);

While this would get the job done, I'm not sure why you wouldn't just use a script include. Instead of managing your code in two separate UI Scripts you could have both types of validation within one script include. It's just as reusable as a UI Script and is arguably easier to maintain.