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

Hello @niveditakumari 

 

That depends on your requirement. What's your requirement ? 

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway. This will help me be recognized for the efforts and also move this questions from unsolved to solved bucket. 

 

 

 

Regards,

 

 

 

Shivalika 

 

 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

 

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNeEISQCY

 

Hi @Shivalika

 

I have catalog item and field('ABC') that is in Date/Time format. When user select date in that field it should allow only 5 business day and business day will be Sunday, Monday, Tuesday, Wednesday, Thursday. 

Ex - Today is 20th March and when user select date in that field then it should allow user to select date after 5 days excluding Friday, Saturday. User can select date after 27th only it should not calculate Friday and Saturday. 

 

Regards, 

Nivedita 

 

 

Hello @niveditakumari 

 

So it is q catalog item, in that case, you can use On load or On change client script with a Script include and Glide Ajax. In there you can use the script I passed. 

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway. This will help me be recognized for the efforts and also move this questions from unsolved to solved bucket. 

 

 

 

 

 

 

 

Regards,

Shivalika 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNeEISQCY

niveditakumari
Mega Sage

Hi @Ankur Bawiskar

 

I have written before business rule script to allow only 5 business day in expected_date field that is in Date/Time format. 

 

(function executeRule(current, previous /*null when async*/ ) {

    // Add your code here

    var expected_date = current.expected_date;
    gs.info('expected date is' + expected_date);
    var startDate = new GlideDateTime(expected_date); // Fixed start date
    var businessDays = 7;
    var daysAdded = 0;

    while (daysAdded < businessDays) {
        startDate.addDays(1); // Move to the next day
        var dayOfWeek = startDate.getDayOfWeek(); // 1 = Sunday, 2 = Monday, ..., 7 = Saturday

        if (dayOfWeek != 6 && dayOfWeek != 7) { // Exclude Friday (6) and Saturday (7)
            daysAdded++;
        }
    }

    // Print the final date in YYYY-MM-DD format
    gs.info("Future Business Date: " + startDate.getValue());

})(current, previous); 
 
I need to abort action when user select date before 5 Business day. 
Can you please help me with above and correct that. 
 
Regards, 
Nivedita 
 
 

niveditakumari
Mega Sage

Hi @Ankur Bawiskar

 

Can you please help me with above script. 

 

Regards, 

Nivedita