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  

Wrong timezone for GlideDateTime

Michael Nichols
Giga Contributor

I am trying to assign a "latest response date" in a workflow, so I can timeout the whole thing and end it if the customer doesn't respond in time. 

To do this, I am setting:

	var today = new GlideDate();
	var cutoffTime = new GlideTime();
	cutoffTime.setValue('19:00:00');
	workflow.scratchpad.approve_by = new GlideDateTime(today.getDisplayValue() + " " + cutoffTime.getTime());

When I display this to the customer on the Case though, I see: 

Approve by: 2021-04-09 02:00:00

Which is obviously not correct, and I assume is using the wrong timezone. Our instance is set to Sweden/Stockholm (UTC+2), and my user has the same timezone, so why is this producing a time in a different TZ? 

How can I ensure that (a) My display info is correct, and (b) that I _actually_ have the right time (7pm tonight, local time), when I use this value later on in a check?

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

getDisplayValue() would always give the time in user's local timezone and not GMT

Can you try this

var today = new GlideDate();

var cutoffTime = new GlideDateTime();
cutoffTime.setDisplayValue(today + ' 19:00:00');

workflow.scratchpad.approve_by = new GlideDateTime(today.getDisplayValue() + " " + cutoffTime.getDisplayValue().toString().split(' ')[1]);

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

11 REPLIES 11

Community Alums
Not applicable

Could you try using .setDisplayValue('19:00:00')? 

The documentation suggests this uses the current users TZ rather than the internal system time

https://developer.servicenow.com/dev.do#!/reference/api/orlando/server/no-namespace/c_GlideTimeScope...

Community Alums
Not applicable

Or actually, having read the docs a bit more, just set the time when you instantiate the object by doing 

var cutoffTime = new GlideTime(68400000); 

The number being the number of milliseconds in 19 hours - that should take your instance timezone into account: 

Example
This example shows adding 10 seconds to midnight (UTC), which is then adjusted for the time zone in which the instance resides. In this case, -8 hours from UTC.

var gt = new GlideTime(10000); 
gs.info(gt.getDisplayValue());
Output

16:00:10

Hmm, will try this one. I'd not looked at the ms option as I kind of felt the "readable" alternative should work, and if ms vs time are different I find it a little odd ... 

Let me try this and see what it does ... 

Nope, the ms option does the same as the time

	var today = new GlideDate();
	var cutoffTime = new GlideTime(68400000); // 19:00:00
// 	cutoffTime.setValue('19:00:00');
	var approve_by = new GlideDateTime(today.getDisplayValue() + " " + cutoffTime.getTime());
	log += "\nCutoff date: " + approve_by;

That log shows me "2021-04-09 00:00:00" - 5 hours ahead of where I want it, i.e. UTC+7.

On the plus side, setting by ms and time work the same, which is good 😄