Time Field Comparison

Megha21
Tera Contributor

Hello All,

We have a requirement to compare current time with 2 time (not date/time) fields of custom table. If the current time is in between the above two time fields. We have used following logic which is mostly working fine but sometime not working fine for system time zone. Could anyone help me with this?

Logic used:

var currentTime = new GlideDateTime().getLocalTime().getDisplayValueInternal(); // Get Current Local Time
var begTime = new GlideDateTime(grHRAssociate.u_beginning_time).getLocalTime().getDisplayValueInternal();
var endTime = new GlideDateTime(grHRAssociate.u_end_time).getLocalTime().getDisplayValueInternal();

if ( currentTime >= begTime && currentTime <= endTime &&) {
agents.push(grHRAssociate.u_hr_associate.toString());
}

Thank you!

11 REPLIES 11

Hi Megha,

 

Did you try this?

 

Thanks.

Hitoshi Ozawa
Giga Sage
Giga Sage

@Megha 

The problem probably happens when the day changes. Instead of using local time to compare, I've used UTC because it'll take care of timezone including day light saving. I'm also using .getNumericValue() in comparision because date format may differ depending on date format setting.

var gtCurrent = new GlideDateTime();
var startTime = grHRAssociate.u_beginning_time;
var endTime = grHRAssociate.u_end_time;

var gtStart = new GlideDateTime(gtCurrent.getDate() + ' ' + startTime);
var gtEnd = new GlideDateTime(gtCurrent.getDate() + ' ' + endTime);

if (gtCurrent.getNumericValue() >= gtStart.getNumericValue() && gtCurrent.getNumericValue() <= gtEnd.getNumericValue()) {
  agents.push(grHRAssociate.u_hr_associate.toString());
}

It is giving same value for gtStart.getNumericValue() and gtEnd.getNumericValue(), hence it is not comparing it correctly

Megha, check if the values passed to the script is correct. I've inserted a log to check the values.

Unless the times are the same, getNumericValue() should be different.

var gtCurrent = new GlideDateTime();
var startTime = grHRAssociate.u_beginning_time;
var endTime = grHRAssociate.u_end_time;
gs.info('startTime:' + startTime + ' endTime:' + endTime);

var gtStart = new GlideDateTime(gtCurrent.getDate() + ' ' + startTime);
var gtEnd = new GlideDateTime(gtCurrent.getDate() + ' ' + endTime);
gs.info('gtStart:' + gtStart + ' gtEnd:' + gtEnd);
gs.info('numericValue() - gtCurrent:' + gtCurrent.getNumericValue() + ' gtStart:' + gtStart.getNumericValue() + ' gtEnd:' + gtEnd.getNumericValue());

if (gtCurrent.getNumericValue() >= gtStart.getNumericValue() && gtCurrent.getNumericValue() <= gtEnd.getNumericValue()) {
  agents.push(grHRAssociate.u_hr_associate.toString());
}

Also, try running the script in background script.

e.g.

var gtCurrent = new GlideDateTime();
var startTime = '09:00:00';
var endTime = '18:00:00';
gs.info('startTime:' + startTime + ' endTime:' + endTime);

var gtStart = new GlideDateTime(gtCurrent.getDate() + ' ' + startTime);
var gtEnd = new GlideDateTime(gtCurrent.getDate() + ' ' + endTime);
gs.info('gtStart:' + gtStart + ' gtEnd:' + gtEnd);
gs.info('numericValue() - gtCurrent:' + gtCurrent.getNumericValue() + ' gtStart:' + gtStart.getNumericValue() + ' gtEnd:' + gtEnd.getNumericValue()); 

Sample result. Values of gtStart and gtEnd are different.

*** Script: startTime:09:00:00 endTime:18:00:00
*** Script: gtStart:2022-03-12 09:00:00 gtEnd:2022-03-12 18:00:00
*** Script: numericValue() - gtCurrent:1647094439977 gtStart:1647075600000 gtEnd:1647108000000

Megha, my bad.

.getTime() is returning actually also returning a date/time with date set to 1970-01-01. It's necessary to remove the date part.

var gtCurrent = new GlideDateTime();
var startTime = grHRAssociate.u_beginning_time;
var endTime = grHRAssociate.u_end_time;
startTime = startTime.split(' ')[1];  // remove the date part '1970-01-01'
endTime = endTime.split(' ')[1];

var gtStart = new GlideDateTime(gtCurrent.getDate() + ' ' + startTime);
var gtEnd = new GlideDateTime(gtCurrent.getDate() + ' ' + endTime);

if (gtCurrent.getNumericValue() >= gtStart.getNumericValue() && gtCurrent.getNumericValue() <= gtEnd.getNumericValue()) {
  agents.push(grHRAssociate.u_hr_associate.toString());
}