End Date Validation is not working in Catalog clientscript

thaduri sai
Tera Contributor

Hi Team,

 

We have a catalog client script(Onsubmit) for two variables (start date and End date) - For example we are selecting 25-12-2024 in start date and 10-01-2025 in End date. As per our script it should allow to take the value in end date. But it is throwing an error. Attached screenshot for your reference.

 

While we are taking 25-12-2024 in start date and 26-01-2025 in end date - It is taking working as expected attached screenshots for your reference. Here we have noticed that calculating date number only not month and year.

 

How to fix this bug - Below is the client script(Onsubmit):-

-------------------------------------------------

function onSubmit() {

    var startDate = g_form.getValue('start_date');
    var endDate = g_form.getValue('end_date');

    if (startDate && endDate) {
        if (endDate < startDate) {
            g_form.showFieldMsg('end_date', getMessage('End date should be later than start date'), 'error');

            return false;
        }
    }
    return true;
}
 
Thanks for the adavance.
 
Thanks,
Saikrishna
2 ACCEPTED SOLUTIONS

@thaduri sai 

is it working fine in native?

try this

function onSubmit() {
    //Type appropriate comment here, and begin script below

    g_form.hideFieldMsg('start_date');
    g_form.hideFieldMsg('end_date');

    if (g_form.getValue('start_date') != '' && g_form.getValue('end_date')) {
        var start = new Date(getDateFromFormat(g_form.getValue('start_date'), g_user_date_format));
        var end = new Date(getDateFromFormat(g_form.getValue('end_date'), g_user_date_format));
        if (end.getTime() < start.getTime()) {
            var message = 'Please give valid start and end dates';
            g_form.showFieldMsg('start_date', message, 'error');
            g_form.showFieldMsg('end_date', message, 'error');
            return false;
        }
    }
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

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

View solution in original post

@thaduri sai 

you can have onChange on each of those 2 date variables/field and inform user to select only future date

something like this

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

    var today = new Date().getTime();
    var selectedDate = new Date(newValue).getTime();
    if (today > selectedDate) {
        alert('You cannot select past date');
        g_form.clear('start_date');
		g_form.setMandatory('start_date', true);
    }

}

If my response helped please mark it correct and close the thread so that it benefits future readers.

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

View solution in original post

14 REPLIES 14

Same issue we are selecting 25-12-2024 in start date and 10-01-2025 in End date. As per our script it should allow to take the value in end date - While we are taking 25-12-2024 in start date and 26-01-2025 in end date - It is taking working as expected. Here we have noticed that calculating date number only not month and year.

Runjay Patel
Giga Sage

Hi @thaduri sai ,

 

try below code.

 

function onSubmit() {

    var requestedEndDate = g_form.getValue('end_date');
    var requestedStartDate = g_form.getValue('start_date');
  
    var format = g_user_date_time_format;

        var startDateMs = getDateFromFormat(requestedStartDate, format);
        var endDateMs = getDateFromFormat(requestedEndDate, format);

        if (startDateMs > endDateMs) {
            g_form.showFieldMsg('end_date', 'End date should be later than start date.', 'error');

            return false;

        }
    

}

 

 

-------------------------------------------------------------------------

If you found my response helpful, please consider selecting "Accept as Solution" and marking it as "Helpful." This not only supports me but also benefits the community.


Regards
Runjay Patel - ServiceNow Solution Architect
YouTube: https://www.youtube.com/@RunjayP
LinkedIn: https://www.linkedin.com/in/runjay

-------------------------------------------------------------------------

Hi @Runjay Patel ,

 

Above script is not working like start date 25-12-2024 and end date 21-12-2024 if am selecting past end date am able to submit. Kindly please let me know?

 

Thanks,

Saikrishna

Hi @thaduri sai ,

 

try below code, i have tested it, working fine.

var requestedEndDate = g_form.getValue('end_date');
    var requestedStartDate = g_form.getValue('start_date');

    
    var startDate = new Date(requestedStartDate.split('-').reverse().join('-'));
    var endDate = new Date(requestedEndDate.split('-').reverse().join('-'));

    // Compare the dates
    if (startDate > endDate) {
        g_form.showFieldMsg('end_date', 'End date should be later than start date.', 'error');
        return false; // Prevent further processing
    }

 

RunjayPatel_0-1735031943886.png

 

 

-------------------------------------------------------------------------

If you found my response helpful, please consider selecting "Accept as Solution" and marking it as "Helpful." This not only supports me but also benefits the community.


Regards
Runjay Patel - ServiceNow Solution Architect
YouTube: https://www.youtube.com/@RunjayP
LinkedIn: https://www.linkedin.com/in/runjay

-------------------------------------------------------------------------