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

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@Michael Nicholson

This is almost certainly because the system default timezone is not the same timezone as you (e.g. you might be set to UK, but the system timezone might be set to LA (default)). Importantly, this could be for very valid reasons,

Check out this part of the Developer API details which show how to take TimeZone's into account with GlideDateTime,

Many thanks,
kind regards 

--------------------------------------------------------------------
Director of Globalization Deployment, Internationalization

Nope. I'm Stockholm/Sweden and so is the system. The TZ I'm getting appears to be PDT for some weird reason

Yes, but dont' forget GlideDateTime uses the time zone of the "current" user. Which might be system if the WF has been interrupted.

-O-
Kilo Patron
Kilo Patron

So

19:00:00

is local time?

If yes, than you are providing a local time where a UTC one is expected.
GlideDateTime constructor expects a UTC time as argument.

Try to create a new instance of GlideDateTime, and set the value in a separate instruction using .setDisplayValue().

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