Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Is it possible to get current time of a different time zone which is not the  system time zone which will take into account the daylight savings (if present) there?

Aditya64
Tera Contributor
Long question : I want to show on a form if a user is out of working hours in his current time zone. Consider only one timezone for this question for now(Let's say time zone X). For this I am getting the servicenow system time value in a script include and adding the offset hours (+10) to that value to get the current time in time zone X. And then calculate if that current time there is out of working hours or not. I have written this code which works:
                var gdt = new GlideDateTime();

                var hours = 60 * 60 * 10;
                gdt.addSeconds(hours);
                
                var myarr = String(gdt.toString());

                myarr = myarr.split(' ');
               
                var time = myarr[1];
                
                time = time.split(':');
                var hour = time[0];
                var minute = time[1];
                

                var hour1 = parseInt(hour, 10);
                var minute1 = parseInt(minute, 10);
           
                if ((hour1 < 16 && hour1 > 8) || ( hour1 == 8 && minute1 > 14) || (hour1 == 16 && minute1 < 31)){ 
                       

                       
                        return 'false'; //Not out of working hours

                    } else {


                        
                        return 'true'; //out of working hours


                    }
I know I could use getTime() and compare to glideTime values but it was not working hence used the long method to compare if the current time in time zone X is between 8:15am to 4:30pm . This code is working fine. Problem is that there is a daylight saving going on in Time Zone X, because of which my time calculation of time zone X is 1 hour less than the one being used. I need it to work 24*7*365. 
 
How can I correctly calculate the time in time zone X (system time +10 hours) which will take into account the daylight saving status too?
2 REPLIES 2

Hitoshi Ozawa
Giga Sage
Giga Sage

Instead of hardcoding calculating working hours in a script, how about using GlideSchedule with timeZone.

GlideSchedule(String sysID, String timeZone)

https://developer.servicenow.com/print_page.do?release=paris&category=null&identifier=c_GlideSchedul...

 

Hitoshi Ozawa
Giga Sage
Giga Sage

Something like this. Schedule is in "System Scheduler" > "Schedules" > "Schedule". "8-5 weekdays" is one of the OOTB schedule.

function checkInWorkingHours(dateTime, timezone) {
var sched= new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae', timezone); // sys_id of "8-5 weekdays" schedule
   var date = new GlideDateTime();
   date.setDisplayValue(dateTime);
   if (sched.isInSchedule(date)) 
      return true;
   else
      return false;
}
var dateTime = '2022-03-24 24:30:00';
var timezone = 'America/New_York';

var isInWorkingHours = checkInWorkingHours(dateTime, timezone);
if (isInWorkingHours) {
  gs.info("In working hours");
} else {
  gs.info("Not in working hours");
}