How to calculate 10 BUSINESS days from today's date?

Melinda7
Kilo Expert

Can anyone please advise about how to calculate a certain number of BUSINESS days from today's date?

USE CASE:

Phone Decommissioning: I need to use a 'date' variable where user needs to add a date that is not earlier than 10 business days from today.

I would need to create a script include function that I can then pull in a GlideAjax.

At the moment, I am using this utility function to calculate the calendar days and it works correctly, if wanting to calculate ONLY calendar days, not BUSINESS days:

isSelectedDateAfterCertainDays: function() {

        if (JSUtil.nil(this.getParameter('sysparm_selectedDate')) || JSUtil.nil(this.getParameter('sysparm_days'))) {
            return false;
        }

        var gdt = new GlideDateTime(gs.nowDateTime());
        var selectedDate = this.getParameter('sysparm_selectedDate');
        var ed = new GlideDateTime(gdt);
        ed.addDays(this.getParameter('sysparm_days'));

        var diff = gs.dateDiff(ed, selectedDate, true);

        if (diff > 0)
            return 'true';
        else
            return 'false';

    },

Went through numerous articles here, even the long-running helpful article by MB found here, but honestly, being a coding beginner, I would very much appreciate help with creating a script include function that would calculate the date EXCLUDING the weekends....

Can anyone help, please?

1 ACCEPTED SOLUTION

i updated the code with glide schedule. Make sure to create a valid scheduled cmn_scheduled table for weekdays and pass that sys_id into glideschedule

 

isSelectedDateAfterCertainDays: function() {

	if (JSUtil.nil(this.getParameter('sysparm_selectedDate')) || JSUtil.nil(this.getParameter('sysparm_days'))) {
		return false;
	}


	var selectedDate = this.getParameter('sysparm_selectedDate');
	var gdt = new GlideDateTime(selectedDate);

	var ed = new GlideDateTime();
	var days =this.getParameter('sysparm_days')
	var dur = new GlideDuration(60 * 60 * 24 * 1000 * days);
	var schedule = new GlideSchedule('38fa64edc0a8016400f4a5724b0434b8'); //sys_id of schedule cmn_schedule table
	var end = schedule.add(ed, dur);

	var diff = end.before(gdt);

	return diff;

}

View solution in original post

12 REPLIES 12

You can add following code to your script, also create a relevant schedule for weekdays

 

var startDate = new GlideDateTime();
var days = 10;
var dur = new GlideDuration(60 * 60 * 24 * 1000 * days);
var schedule = new GlideSchedule('38fa64edc0a8016400f4a5724b0434b8'); //sys_id of schedule cmn_schedule table

var end = schedule.add(startDate, dur);
gs.info(end);

Hello @Pranesh 

Thank you. I cannot, however, set the number of days in a variable, as this function/utility in the script include will need to be reusable for future catalog items with different 'business day numbers'.

Can you check my reply to @Lunatic Zorro below and maybe you could tell me what I do wrong?

It still only accounts calendar days, not business days...

Thank you so much in advance

i updated the code with glide schedule. Make sure to create a valid scheduled cmn_scheduled table for weekdays and pass that sys_id into glideschedule

 

isSelectedDateAfterCertainDays: function() {

	if (JSUtil.nil(this.getParameter('sysparm_selectedDate')) || JSUtil.nil(this.getParameter('sysparm_days'))) {
		return false;
	}


	var selectedDate = this.getParameter('sysparm_selectedDate');
	var gdt = new GlideDateTime(selectedDate);

	var ed = new GlideDateTime();
	var days =this.getParameter('sysparm_days')
	var dur = new GlideDuration(60 * 60 * 24 * 1000 * days);
	var schedule = new GlideSchedule('38fa64edc0a8016400f4a5724b0434b8'); //sys_id of schedule cmn_schedule table
	var end = schedule.add(ed, dur);

	var diff = end.before(gdt);

	return diff;

}

Hi @Pranesh 

Thank you, this works amazingly!

Big kudos to you 🙂

Lunatic Zorro
Tera Guru

 

Hi,

 

Can you please try the below logic if it helps. You just have to pass the sys_id of the weekday schedule.

isSelectedDateAfterCertainDays: function() {

        if (JSUtil.nil(this.getParameter('sysparm_selectedDate')) || JSUtil.nil(this.getParameter('sysparm_days'))) {
            return false;
        }

        var gdt = new GlideDateTime(gs.nowDateTime());
        var selectedDate = this.getParameter('sysparm_selectedDate');
        var schedule=new GlideSchedule();
schedule.load('ADD SYSID OF WEEKDAY SCHEDULE');
var duration=schedule.duration(gdt,selectedDate);
  var diff=duration.getNumericValue();    //Get answer in ms  

        if (diff > 10*24*60*60*1000)
            return 'true';
        else
            return 'false';

    },