I need to allow user only to select date after 7 days excluding business days.

niveditakumari
Mega Sage

Hi,  

 

I need to allow user to select date after 7 days but it should calculate only business days not weekend. In our project as per client we follow Friday, Saturday as weekend and I need to exclude Friday, Saturday. When user select date then it should calculate for Sunday, Monday, Tuesday, Wednesday, Thursday as business day.  

Can you please help me with that. 

 

Regards, 

Nivedita 

 

 

1 ACCEPTED SOLUTION

@niveditakumari 

it worked see

Script Include:

var ValidationUtils = Class.create();
ValidationUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateDate: function() {

        var selected_date = new GlideDateTime(this.getParameter('sysparm_expectedDate'));
        var requiredDate = new GlideDateTime(); // Todays Date
        var businessDays = 7;
        var daysAdded = 0;
        while (daysAdded < businessDays) {
            requiredDate.addDays(1); // Move to the next day
            var dayOfWeek = requiredDate.getDayOfWeek(); // 1 = Sunday, 2 = Monday, ..., 7 = Saturday
            if (dayOfWeek != 6 && dayOfWeek != 7) { // Exclude Friday (6) and Saturday (7)
                daysAdded++;
            }
        }
        var output = {};
        if (selected_date.getDate() > requiredDate.getDate()) {
            output.correctDateSelected = 'Yes';

        } else {
            output.correctDateSelected = 'No';
            output.requiredDate = requiredDate.getDate().toString();
        }
        return JSON.stringify(output);
    },
    type: 'ValidationUtils'
}); 

AnkurBawiskar_1-1742903835567.png

 

Client Script:

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

    g_form.hideFieldMsg('my_datetime');

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate', g_form.getValue('my_datetime')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);
        if (validatedOutput.correctDateSelected == 'No') {
            g_form.showFieldMsg('my_datetime', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
        }
    });

    //Type appropriate comment here, and begin script below

}

AnkurBawiskar_0-1742903809426.png

 

Output:

business days.gif

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

38 REPLIES 38

@niveditakumari 

I used onChange with same script and it worked for me.

Please don't use onSubmit

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

@niveditakumari 

it worked see

Script Include:

var ValidationUtils = Class.create();
ValidationUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateDate: function() {

        var selected_date = new GlideDateTime(this.getParameter('sysparm_expectedDate'));
        var requiredDate = new GlideDateTime(); // Todays Date
        var businessDays = 7;
        var daysAdded = 0;
        while (daysAdded < businessDays) {
            requiredDate.addDays(1); // Move to the next day
            var dayOfWeek = requiredDate.getDayOfWeek(); // 1 = Sunday, 2 = Monday, ..., 7 = Saturday
            if (dayOfWeek != 6 && dayOfWeek != 7) { // Exclude Friday (6) and Saturday (7)
                daysAdded++;
            }
        }
        var output = {};
        if (selected_date.getDate() > requiredDate.getDate()) {
            output.correctDateSelected = 'Yes';

        } else {
            output.correctDateSelected = 'No';
            output.requiredDate = requiredDate.getDate().toString();
        }
        return JSON.stringify(output);
    },
    type: 'ValidationUtils'
}); 

AnkurBawiskar_1-1742903835567.png

 

Client Script:

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

    g_form.hideFieldMsg('my_datetime');

    var validateSelectedDate = new GlideAjax('global.ValidationUtils');
    validateSelectedDate.addParam('sysparm_name', 'validateDate');
    validateSelectedDate.addParam('sysparm_expectedDate', g_form.getValue('my_datetime')); //Replace your date time variable
    validateSelectedDate.getXMLAnswer(function getExpectedDate(answer) {
        var validatedOutput = JSON.parse(answer);
        if (validatedOutput.correctDateSelected == 'No') {
            g_form.showFieldMsg('my_datetime', 'kindly select date after ' + validatedOutput.requiredDate.toString(), 'error');
        }
    });

    //Type appropriate comment here, and begin script below

}

AnkurBawiskar_0-1742903809426.png

 

Output:

business days.gif

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

Hi @Ankur Bawiskar

 

Thank you for all your help. 

It is working as expected. 

 

Regards, 

Nivedita 

 

 

@niveditakumari 

Thank you for marking my response as helpful.

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