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

Mahendra RC
Mega Sage

Hello Kun,

Please check with below at or before today condition once. Also if you want the validation to happen onLoad then check On load checkbox: Replace your field name in filter condition. Also if you want to allow today's date then change the filter to at or before Yesterday

find_real_file.png

find_real_file.png

function onCondition() {
	g_form.clearValue("start_date"); // replace your field name here
	g_form.showFieldMsg("start_date", "Please select future date", "error"); // replace your field name here

}

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

Thanks

I also tried this but time will take in the variable in my system time but timezone is servicenow timezone.

 

 

Hello Kun,

Please check with below client script:

Client script on planned_start_date_time field:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
	
    if (newValue) {
        var ga = new GlideAjax('CustomClientDateTimeUtils');
        ga.addParam('sysparm_name', 'compareToCurrentTime');
        ga.addParam('sysparm_selected_time', newValue);
        ga.getXMLAnswer(parseReceivedData);
    } 
	
	function parseReceivedData(answer) {
		alert(answer);
		if (answer == "false") {
			g_form.clearValue("planned_start_date_time");
			g_form.showFieldMsg("planned_start_date_time", "Please select future date", "error");
		}
	}
}

Script Include where Client callable is checked: Script will get the current time in user's timezone and compare with the date time selected by user as per his timezone:

var CustomClientDateTimeUtils = Class.create();
CustomClientDateTimeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	compareToCurrentTime: function() {
		var selectedTime = this.getParameter("sysparm_selected_time");
		var selectedGDT = new GlideDateTime();
		selectedGDT.setDisplayValue(selectedTime);
		var selectedTimeInUserTZ = selectedGDT.getDisplayValue();
		var currentGDT = new GlideDateTime();
		var currentTimeInUserTZ = currentGDT.getDisplayValue();
		if (selectedTimeInUserTZ < currentTimeInUserTZ) {
			return false;
		} else {
			return true;
		}
	},

    type: 'CustomClientDateTimeUtils'
});

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

Thanks

 

Time taken in Variable on form is system time.

find_real_file.png

and below are the logs:-

 

Note- My system timezone is EST and servicenow is IST and it will take time in EST and time zone in IST

its not converting var selectedTimeInUserTZ = selectedGDT.getDisplayValue();
        gs.log("kunG3"+selectedTimeInUserTZ);

 

into user time zone as per logs