Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Based on user selection date i need to calculcate days

gillerlaraj
Tera Contributor

HI,

 

i have start date (date/time) and end date (date/time) and Days as check boxs.

 

if user choose start date and end date and choose days like monday and wednesday means, it will calculate how many mondays & wednedays and set the value in number of days.

 

gillerlaraj_0-1744963039863.png

this is the script i written , but i am not able to move the logic

 

client script

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

var fri = g_form.getValue(' friday');
    var sat = g_form.getValue('saturday');
    var sun = g_form.getValue('sunday');

    var ajax = new GlideAjax('x_892649_medicals.daysCalculation');
    ajax.addParam('sysparm_name', 'days');
    ajax.addParam('sysparm_sdate', sdate);
    ajax.addParam('sysparm_edate', edate);

    ajax.addParam('sysparm_mon',mon);
    ajax.addParam('sysparm_tue',tue);
    ajax.addParam('sysparm_wed',wed);
    ajax.addParam('sysparm_thurs',thurs);
    ajax.addParam('sysparm_fri',fri);
    ajax.addParam('sysparm_sat',sat);
    ajax.addParam('sysparm_sun',sun);
    ajax.getXMLAnswer(response);

    function response(result) {
        alert(result);
        g_form.setValue('number_of_days',result);
    }
 

 

script include

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


    days: function() {
        var sdate = this.getParameter('sysparm_sdate');
        var edate = this.getParameter('sysparm_edate');

        var mon=this.getParameter('sysparm_mon');
        var tue=this.getParameter('sysparm_tue');
        var wed=this.getParameter('sysparm_wed');
        var thurs=this.getParameter('sysparm_thurs');
        var fri=this.getParameter('sysparm_fri');
        var sat=this.getParameter('sysparm_sat');
        var sun=this.getParameter('sysparm_sun');

        var startdate = new GlideDateTime(sdate);
        var enddate = new GlideDateTime(edate);


        if(mon==true){
           
        }

 

 

Regards,

Rajesh.

2 REPLIES 2

J Siva
Kilo Patron
Kilo Patron

Hi @gillerlaraj 
Try the below scripts.

Fields/Variables:

JSiva_0-1744973246318.png

 

Script include:

JSiva_1-1744973285245.png

var SJ_CatalogUtils = Class.create();
SJ_CatalogUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getDays: function() {
        var startDate = new GlideDateTime(this.getParameter('start'));
        var endDate = new GlideDateTime(this.getParameter('end'));
        var count = {
            'monday': 0,
            'tuesday': 0,
            'wednesday': 0,
            'thursday': 0,
            'friday': 0,
            'saturday': 0,
            'sunday': 0
        };

        while (startDate.compareTo(endDate) <= 0) {
            var dayOfWeek = startDate.getDayOfWeek();
            if (dayOfWeek === 1) count.monday++;
            if (dayOfWeek === 2) count.tuesday++;
            if (dayOfWeek === 3) count.wednesday++;
            if (dayOfWeek === 4) count.thursday++;
            if (dayOfWeek === 5) count.friday++;
            if (dayOfWeek === 6) count.saturday++;
            if (dayOfWeek === 7) count.sunday++;

            startDate.addDays(1); // Move to the next day
        }
        gs.info("Monday: " + count.monday.toString());
        gs.info("Tuesday: " + count.tuesday.toString());
        gs.info("Wednesday: " + count.wednesday.toString());
        gs.info("Thursday: " + count.thursday.toString());
        gs.info("Friday: " + count.friday.toString());
        gs.info("Saturday: " + count.saturday.toString());
        gs.info("Sunday: " + count.sunday.toString());

        return JSON.stringify(count);

    },

    type: 'SJ_CatalogUtils'
});

Client scripts (On change):
Note: You have to create 7 client scripts for each day (7 days). Script logic remains same. So just do insert & stay by selecting the day.

 

JSiva_2-1744973386469.png

 

JSiva_3-1744973602070.png

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

    var mon = g_form.getValue('mon');
    var tue = g_form.getValue('tue');
    var wed = g_form.getValue('wed');
    var thu = g_form.getValue('thu');
    var fri = g_form.getValue('fri');
    var sat = g_form.getValue('sat');
    var sun = g_form.getValue('sun');
    var total = 0;

    var script = new GlideAjax('SJ_CatalogUtils');
    script.addParam('sysparm_name', 'getDays');
    script.addParam('start', g_form.getDisplayValue('start_date'));
    script.addParam('end', g_form.getDisplayValue('end_date'));
    script.getXMLAnswer(function(response) {

        var count1 = JSON.parse(response);
        if (mon == 'true')
            total += parseInt(count1.monday);
        if (tue == 'true')
            total += parseInt(count1.tuesday);
        if (wed == 'true')
            total += parseInt(count1.wednesday);
        if (thu == 'true')
            total += parseInt(count1.thursday);
        if (fri == 'true')
            total += parseInt(count1.friday);
        if (sat == 'true')
            total += parseInt(count1.saturday);
        if (sun == 'true')
            total += parseInt(count1.sunday);

        g_form.setValue('total_days', total.toString());
    });


}

Result:

JSiva_4-1744973667204.png

 

Regards,
Siva

 

sunil maddheshi
Tera Guru

@gillerlaraj Please try with below updated code

var daysCalculation = Class.create();
daysCalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    days: function () {
        var sdate = this.getParameter('sysparm_sdate');
        var edate = this.getParameter('sysparm_edate');

        var selectedDays = {
            1: this.getParameter('sysparm_mon') == 'true',   // Monday
            2: this.getParameter('sysparm_tue') == 'true',   // Tuesday
            3: this.getParameter('sysparm_wed') == 'true',   // Wednesday
            4: this.getParameter('sysparm_thurs') == 'true', // Thursday
            5: this.getParameter('sysparm_fri') == 'true',   // Friday
            6: this.getParameter('sysparm_sat') == 'true',   // Saturday
            0: this.getParameter('sysparm_sun') == 'true'    // Sunday (GlideDateTime considers Sunday as 0)
        };

        var count = 0;
        var start = new GlideDateTime(sdate);
        var end = new GlideDateTime(edate);

        // Loop from start to end date
        while (start.getDate().getNumericValue() <= end.getDate().getNumericValue()) {
            var dayOfWeek = start.getDayOfWeekLocalTime(); // Returns 1=Monday to 7=Sunday

            // Convert 7 (Sunday) to 0 to match JavaScript days
            var jsDay = (dayOfWeek == 7) ? 0 : dayOfWeek;

            if (selectedDays[jsDay]) {
                count++;
            }

            // Move to next day
            start.addDaysLocalTime(1);
        }

        return count.toString();
    }
});

Please mark/correct helpful if this helps you!