User time preference

nikhitha24
Tera Guru

Hi @all,

 

I have a requirement to set the message to set the user time preference in the variable.

 In the planned start and end it need to be populate based on the user time. it need be checked current logged in user time.

nikhitha24_0-1706604597839.png

 

Catalog client script:

function chgLookup(chgRef)
    {
        var dateAjax = new GlideAjax('DateValidateAJAX');
        dateAjax.addParam("sysparm_name", "validateDate");
        dateAjax.addParam('sysparm_end_date', chgRef.start_date);
        dateAjax.getXML(callBackDate);

        function callBackDate(response)
        {
            var resultDate = response.responseXML.documentElement.getAttribute('answer');
            if (resultDate<0)
            {
                var today_date = new Date();
                var today_date_str = formatDate(today_date, g_user_date_time_format);
                //Set "production planned start" if that date is in the future, otherwise default to now()
                g_form.setValue('schedule_date_time_for_snapshot_creation',today_date_str);
            }
            else
            {
                g_form.setValue('schedule_date_time_for_snapshot_creation',chgRef.start_date);
            }
        }

        var chgDates = 'Production planned start: '+chgRef.start_date+'\n'+'Production planned end: '+chgRef.end_date;
        g_form.showFieldMsg('schedule_date_time_for_snapshot_creation',chgDates,'info');
    }
 
 
 
Script Include:
 
var DateValidateAJAX = Class.create();

DateValidateAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {


    /*
     * Compares two dates from the same timezone
     */
    compareDates: function( /*GlideDate*/ date1, /*GlideDate*/ date2) {

        var diff = gs.dateDiff(date1, date2, true);

        return (diff < 0);
    },

    /*
     * Compares a date in the server's timezone to now in the server timezone too
     */
    isDateBeforeToday: function() {
        var today = new GlideDateTime(),
            date = new GlideDateTime();
        today.setDisplayValue(today.getDate());
        date.setDisplayValue(this.getParameter('sysparm_dateValue'));

        return this.compareDates(today, date);
    },

    isDateAfterFiveWeeks: function() {
        var gdt1 = new GlideDateTime(),
            gdt2 = new GlideDateTime();
        gdt1.addWeeksLocalTime(5);
        gdt1.setDisplayValue(gdt1.getDate());
        gdt2.setDisplayValue(this.getParameter('sysparm_dateValue'));

        return this.compareDates(gdt1, gdt2);
    },
   
    isDateAfterNWeeks: function() {
        var gdt1 = new GlideDateTime(),
            gdt2 = new GlideDateTime();
        gdt1.addWeeksLocalTime(this.getParameter('sysparm_weeks'));
        gdt1.setDisplayValue(gdt1.getDate());
        gdt2.setDisplayValue(this.getParameter('sysparm_date'));
        return this.compareDates(gdt2, gdt1);
    },

    isDateAfterOneDayorWeekDay: function() {
        var gdt1 = new GlideDateTime(),
            gdt2 = new GlideDateTime();
        gdt1.addSeconds(86300);
        gdt2.setDisplayValue(this.getParameter('sysparm_dateValue'));
        var result = this.compareDates(gdt1, gdt2);
        var wday = gdt2.getDayOfWeekLocalTime();
        if (result == true) {
            return result;
        }
        if (wday == 6 || wday == 7) {
            return true;
        }
    },
    isDateInFuture: function(actual_start, actual_end) {
        var gdt1 = new GlideDateTime();
        gdt1.addSeconds(60);
        var result1 = this.compareDates(gdt1, actual_start);
        var result2 = this.compareDates(gdt1, actual_end);
        if (result1 == 'false') {
            return result1;
        } else
            return result2;
    },

    /*
     Verifies entered date is in future and greater than n days from today
     @Days = number of days you wants to add for comparison
    */
    isDateNDaysinFutureAJAX: function() {
        var enteredDate = this.getParameter('sysparm_dateValue');
        var daystoAdd = this.getParameter('sysparm_days');
        daystoAdd = parseInt(daystoAdd);
        var gdt1 = new GlideDateTime(),
            gdt2 = new GlideDateTime(enteredDate);
        gdt1.addDaysLocalTime(daystoAdd);
        gdt1.setDisplayValue(gdt1.getDate());
        gdt2.setDisplayValue(gdt2.getDate());
        var diff = gs.dateDiff(gdt1, gdt2, true);

        gs.log("Durgesh Date Diff " + diff);
        return this.compareDates(gdt1, gdt2);
    },

    /*
     Verifies entered date is in future and greater than n months from today
     @Months = number of months you wants to add for comparison
    */
    isDateNMonthsinFutureAJAX: function() {
        var enteredDate = this.getParameter('sysparm_dateValue');
        var monthstoAdd = this.getParameter('sysparm_months');
        monthstoAdd = parseInt(monthstoAdd);
        var gdt1 = new GlideDateTime(),
            gdt2 = new GlideDateTime(enteredDate);
        gdt1.addMonthsLocalTime(monthstoAdd);
        gdt1.setDisplayValue(gdt1.getDate());
        gdt2.setDisplayValue(gdt2.getDate());
        var diff = gs.dateDiff(gdt1, gdt2, true);
        gs.log('isDateNMonthsinFutureAJAX compare dates == ' + this.compareDates(gdt1, gdt2));
        gs.log(" isDateNMonthsinFutureAJAX Date Diff " + diff);
        return this.compareDates(gdt1, gdt2);
    },

    getDifferenceDays: function() {
        return (gs.dateDiff(this.getParameter('sysparm_date_from'), this.getParameter('sysparm_date_to'), true) / 86400).toFixed(0);
    },
    validateDate: function() {

        var ActualEndDate = this.getParameter('sysparm_end_date');
        return gs.dateDiff(gs.now(), ActualEndDate, true) / 86400;
    },

    validateDateTime: function() {
        var startDateTime = this.getParameter('sysparm_start_date_time');
        return gs.dateDiff(gs.nowDateTime(), startDateTime, true);
    },

    getDifferenceMins: function() {
        return (gs.dateDiff(this.getParameter('sysparm_start_date'), this.getParameter('sysparm_end_date'), true) / 60);
    },
    add3days: function() {
        var startdate = this.getParameter('start_date');
        var time = this.getParameter('time_to_add');
        var gdt1 = new GlideDateTime(startdate);
        gdt1.addSeconds(time);

        return gdt1.getDisplayValue();
    },


    validateDateBasedOnCI: function() {

        var ci = new GlideRecord('cmdb_ci');
        var ciSelected = this.getParameter('sysparm_ci');
        ci.addQuery('sys_id', ciSelected);
        ci.query();
        while (ci.next()) {
            var usedFor = ci.u_used_for.name;
        }
        if (usedFor == 'Production') {
            gs.log("Prod CI Yes. " + usedFor);
            var dateSelected = new GlideDate();
            dateSelected.setDisplayValue(this.getParameter('sysparm_dateSelected'));
            var date2 = gs.daysAgo(35);
            var date3 = date2.split(' ')[0];
            var currentDate = gs.nowDateTime();
            var today = currentDate.split(' ')[0];
            if (dateSelected <= date3 || dateSelected > today) {
                return false;
            } else {
                return true;
            }
        } else {
            gs.log("Prod CI No. " + usedFor);
            var dateSelected2 = new GlideDate();
            dateSelected2.setDisplayValue(this.getParameter('sysparm_dateSelected'));
            var date2_oldest = gs.daysAgo(7);
            var date3split = date2_oldest.split(' ')[0];
            var currentDate2 = gs.nowDateTime();
            var today2 = currentDate2.split(' ')[0];
            if (dateSelected2 <= date3split || dateSelected2 > today2) {
                return false;
            } else {
                return true;
            }
        }
    },
    add1year: function() {
        var year = this.getParameter('year_to_add');
        var expirydate = this.getParameter('expiry_date');
        var gdt2 = new GlideDateTime(expirydate);
        gdt2.addYearsLocalTime(year);
        return gdt2.getDisplayValue();
    },
   
    compareDateTime: function()
    {  
        var dateTime = new GlideDateTime(this.getParameter('sysparm_date_time'));
        var startDateTime = new GlideDateTime(this.getParameter('sysparm_start_date_time'));
        var endDateTime = new GlideDateTime(this.getParameter('sysparm_end_date_time'));

        if(dateTime.getNumericValue() < endDateTime.getNumericValue() && dateTime.getNumericValue() >=startDateTime.getNumericValue())
        {
            return true;
        }
        else{
            return false;
        }
    },

    type: 'DateValidateAJAX'
});

 

 

Please help how we can achieve this.

1 REPLY 1

Aniket Chavan
Tera Sage
Tera Sage

Hello @nikhitha24 ,

Please give a try to the script below with added modifications and see how it works for you.

Script Include:

var DateValidateAJAX = Class.create();

DateValidateAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    // ... (existing functions remain unchanged)

    getLoggedInUserTimeZoneOffset: function() {
        // Get the current logged-in user's timezone offset in minutes
        var userTimezoneOffset = new GlideDateTime().getUser().getTZOffset();
        return userTimezoneOffset;
    },

    convertDateToUserTimeZone: function(date) {
        // Convert a given date to the user's timezone
        var userTimezoneOffset = this.getLoggedInUserTimeZoneOffset();
        var convertedDate = new GlideDateTime(date);
        convertedDate.addMinutes(userTimezoneOffset);
        return convertedDate;
    },

    setPlannedStartBasedOnUserTimeZone: function() {
        var startDate = this.getParameter('sysparm_start_date');
        
        // Convert the start date to the user's timezone
        var userTimeZoneStartDate = this.convertDateToUserTimeZone(startDate);

        // Set the planned start date based on the user's timezone
        g_form.setValue('schedule_date_time_for_snapshot_creation', userTimeZoneStartDate.getDisplayValue());
    },

    type: 'DateValidateAJAX'
});

 

Catalog client script:

function chgLookup(chgRef) {
    var dateAjax = new GlideAjax('DateValidateAJAX');
    dateAjax.addParam("sysparm_name", "setPlannedStartBasedOnUserTimeZone");
    dateAjax.addParam('sysparm_start_date', chgRef.start_date);
    dateAjax.getXML(callBackDate);

    function callBackDate(response) {
        // Handle the response if needed
    }

    var chgDates = 'Production planned start: ' + chgRef.start_date + '\n' + 'Production planned end: ' + chgRef.end_date;
    g_form.showFieldMsg('schedule_date_time_for_snapshot_creation', chgDates, 'info');
}

 

Please Mark Correct if this solves your query and also mark 👍Helpful if you find my response worthy based on the impact.

 

Thanks,

Aniket