System time zone and user's time zone in email

oharel
Kilo Sage

Hi,

I am trying to send the SLA Time to Resolve   value in an email when an incident is opened.

I am using the following email script:

checkETA();

function checkETA() {

  var encQuery = 'slaSTARTSWITHTTR^stage=in_progress';

  var eta = new GlideRecord('task_sla');

  eta.addQuery('task', current.sys_id);

  eta.addEncodedQuery(encQuery);

  eta.query();

  while(eta.next()) {

  template.print('Estimated time of resolution: ' + eta.planned_end_time.getDisplayValue());

  }

}

However, what I am getting in the emails, regardless of the time zone of the customer who opened the incident, is:

Estimated time of resolution: 2016-10-21 23:55:31 IDT --> Israel Daylight Time

I thought eta.planned_end_time.getDisplayValue() should show the user's timezone

Any Idea why the correct information is not displayed?

Harel

1 ACCEPTED SOLUTION

Hi Harel - I get it. Would you please run this and see what you get? I think this will give us a clue:



// print eta.planned_end_time


template.print(eta.planned_end_time);


template.print(eta.planned_end_time.getDisplayValue());



// print GlideDateTime(eta.planned_end_time)


var gdt = new GlideDateTime(eta.planned_end_time);


template.print('GlideDateTime(eta.planned_end_time)');


template.print(gdt);


template.print(gdt.getDisplayValue());



// set user timezone


var timezone = Packages.java.util.TimeZone.getTimeZone(current.caller_id.time_zone);


gdt.setTZ(timezone);


template.print('set user timezone');


template.print(gdt);


template.print(gdt.getDisplayValue());



// print GlideDateTime(eta.planned_end_time.getDislayValue())


var gdt = new GlideDateTime(eta.planned_end_time.getDislayValue());


template.print('GlideDateTime(eta.planned_end_time).getDislayValue()');


template.print(gdt);


template.print(gdt.getDisplayValue());


View solution in original post

20 REPLIES 20

bernyalvarado
Mega Sage

Hi Harel,



What you need to do is to use the GlideDateTime class to grab the user's time zone (getUserTimeZone()) and the related time in the user's timezone.



http://wiki.servicenow.com/?title=GlideDateTime#gsc.tab=0



Thanks,


Berny


Hi Berny,



I am getting somewhere...


Changed my script to this:


var timezone = Packages.java.util.TimeZone.getTimeZone(current.caller_id.time_zone);


  var gdt = new GlideDateTime(eta.planned_end_time.getDisplayValue());


  gdt.setTZ(timezone);


    template.print(gdt +   '<br \>');



And the output is:


2016-10-24   18:44:15 --> no time zone abbreviation there.


if I use gdt.getDisplayValue() I get the wrong time, with the abbreviation, for instance: 13:44:15 CDT



Edit:


using instead:


var gdt1 = new GlideDateTime(eta.planned_end_time.getDisplayValue());


template.print(gdt1 + '<br \>');



gives the same results - correct time but no abbreviation.



harel


Can you try



var gdt = new GlideDateTime(eta.planned_end_time);


template.print(gdt.getDisplayValue() + '<br \>');



Please feel free to connect, follow, mark helpful, like, endorse.


John Chun, PhD PMP see John's LinkedIn profile


visit snowaid


You may need to add line 2:



var gdt = new GlideDateTime(eta.planned_end_time);  


gdt.setTZ(timezone);


  • template.print(gdt.getDisplayValue() + '<br \>');