The CreatorCon Call for Content is officially open! Get started here.

Issue in calculating time difference in different timezone

kun1
Tera Expert

Hi Team,

My system timezone is in EST and servicenow timezone is in  IST. Below are the script which calculate time difference but its not working properly.

Catalog Client Script:-

 

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading)
 
    {
 
        return;
 
    }
 
    //start the validation for star date time.
 
 
    if (newValue != '')
 
    {
        var ga = new GlideAjax('BIIB_CPGResizeConfirmDate');
        ga.addParam('sysparm_name', 'chkstartstopDate');
        ga.addParam('sysparm_time', g_form.getValue('planned_start_date_time'));
        ga.getXML(NewParse);
    }
 
    function NewParse(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        if (answer == 'false') {
            alert("Please select a future date");
            g_form.setValue('planned_start_date_time', '');
 
        }
    }
}
 
Script include:-
var BIIB_CPGResizeConfirmDate = Class.create();
BIIB_CPGResizeConfirmDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    chkCurrDate: function() {//Check if given Date time is in past or not.
        var ActualEndDate = this.getParameter('sysparm_time');
        var dif = gs.dateDiff(gs.nowDateTime(), ActualEndDate, true);
        if (dif < 1800) {
            return false;
        } else {
            return true;
        }
    },
    chkstartstopDate: function() {//Check if given Date time is in past or not for start stop.
        var ActualEndDate = this.getParameter('sysparm_time');
        var dif = gs.dateDiff(gs.nowDateTime(), ActualEndDate, true);
        if (dif < -2) {
            return false;
        } else {
            return true;
        }
    },
    
});
 
it will not calculating time diff properly when system(EST) and servicenow (IST) timezone is diff
22 REPLIES 22

Hello Kun,

Please check with below code:

If you still get issue just once check replacing the below line

selectedTime.setNumericValue(selectedTime.getNumericValue() + (timeZoneOffSet));

with this one

selectedTime.setNumericValue(selectedTime.getNumericValue() + (timeZoneOffSet - 3600000));

var CustomClientDateTimeUtils = Class.create();
CustomClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	compareToCurrentTime: function() {
		var enteredTime = this.getParameter("sysparm_selected_time");
		var selectedTime = new GlideDateTime(enteredTime);     // Display date retrieved        
		var tz = Packages.java.util.TimeZone.getTimeZone("EST"); 
		selectedTime.setTZ(tz);    // Set timezone
		var timeZoneOffSet = selectedTime.getTZOffset();  // Get offset of timezone set above     
		if (timeZoneOffSet < 0) {
			timeZoneOffSet = timeZoneOffSet * -1; 
		}    
		selectedTime.setNumericValue(selectedTime.getNumericValue() + (timeZoneOffSet));     // Add offset to current time  

		var selectedTimeInGMT = new GlideDateTime(selectedTime.getValue()+ "");   
		var selectedTimeInUserTimeZone = selectedTimeInGMT.getDisplayValue();
		
		var currentTimeInGMT = new GlideDateTime();
		var currentTimeInUserTimeZone = currentTimeInGMT.getDisplayValue();
		
		if (selectedTimeInUserTimeZone < currentTimeInUserTimeZone)
			return false;
		} else {
			return true;
		}
	},

    type: 'CustomClientDateTimeUtils'
});

Please mark my respsone as helpful/correct, if it answer your question.

Thanks

Not working as expected. logs attached

Hello kun,

Please always make sure to share the lastest script that you have written in your instance. Just looking at the screenshot it is difficult to understand.

Thanks