The CreatorCon Call for Content is officially open! Get started here.

modify script to calculate business days

MaharshiC
Tera Contributor

Hi ,

 

I have a script to check whether 50% time have passed. Now I have written a script which is working fine. But i need to make it work for business days only (mon- fri) instead of everyday. Can you please help me to modify the script?

var now = new GlideDateTime();
var target='';
var submit ='';
var finaldiff ='';
var presentdiff ='';
var half='';
var req = new GlideRecord('x_iem_tqa_work_request');
req.addEncodedQuery('state=1^ORstate=2^target_dateISNOTEMPTY');
req.query();
while (req.next()) {
    target = req.target_date.getGlideObject();
    submit = req.sys_created_on.getGlideObject();
    finaldiff = (target.getNumericValue() - submit.getNumericValue()) / 1000;
    presentdiff = (target.getNumericValue() - now.getNumericValue()) / 1000;
	half = finaldiff / 2;
	if(presentdiff>halfDurationSeconds)
	{  
		gs.info(half);
		gs.info(presentdiff);
		gs.info('yes');
	}
	else{
		gs.info('no');
	}

}
1 ACCEPTED SOLUTION

Vishal Jaswal
Giga Sage
Giga Sage

Hello @MaharshiC 

var now = new GlideDateTime();
var target = '';
var submit = '';
var finaldiff = '';
var presentdiff = '';
var half = '';
var req = new GlideRecord('x_iem_tqa_work_request');
req.addEncodedQuery('state=1^ORstate=2^target_dateISNOTEMPTY');
req.query();
while (req.next()) {
   target = req.target_date.getGlideObject();
   submit = req.sys_created_on.getGlideObject();
   // Calculate business days between submit and target
   finaldiff = getBusinessDays(submit, target);
   presentdiff = getBusinessDays(now, target);
   half = finaldiff / 2;
   gs.info('---------------------------------------------');
   gs.info('Submit Date: ' + req.sys_created_on.getDisplayValue());
   gs.info('Target Date: ' + req.target_date.getDisplayValue());
   gs.info('Total Business Days (submit → target): ' + finaldiff);
   gs.info('Remaining Business Days (now → target): ' + presentdiff);
   gs.info('Half (business days): ' + half.toFixed(1));
  if (presentdiff > half) {
        gs.info('Decision: YES (More than half left)');

    } else {
        gs.info('Decision: NO (Half or less remaining)');
    }
}
// function to calculate business days (Mon–Fri)
function getBusinessDays(start, end) {
   var businessDays = 0;
   var tempDate = new GlideDateTime(start);
   var endDate = new GlideDateTime(end);
   while (tempDate.compareTo(endDate) < 0) {
       var dayOfWeek = tempDate.getDayOfWeekLocalTime(); // 1 = Sunday, 7 = Saturday
       if (dayOfWeek > 1 && dayOfWeek < 7) {
           businessDays++;
       }
       tempDate.addDaysLocalTime(1);
   }
   return businessDays;
}



VishalJaswal_0-1744651052163.png

 

 

 

VishalJaswal_0-1744651119587.png

 

 

 

 

 


Hope that helps!

View solution in original post

2 REPLIES 2

SasiChanthati
Giga Guru

The key change you need is to calculate the time difference based only on business days (Monday to Friday), rather than just subtracting the timestamps directly. Since ServiceNow's GlideDateTime doesn’t natively support business-day-only calculations, we have to implement a workaround by looping through the days and counting only the weekdays. Here’s a revised version of your script that includes a helper function to calculate business seconds between two GlideDateTime objects:

 

function getBusinessSecondsBetween(startDate, endDate) {
var seconds = 0;
var current = new GlideDateTime(startDate);
var end = new GlideDateTime(endDate);

while (current.before(end)) {
var dayOfWeek = current.getDayOfWeekLocalTime(); // 1 = Sunday, 7 = Saturday
if (dayOfWeek > 1 && dayOfWeek < 7) {
seconds += 86400; // add 1 day in seconds
}
current.addDaysLocalTime(1);
}

return seconds;
}

var now = new GlideDateTime();
var target = '';
var submit = '';
var finaldiff = '';
var presentdiff = '';
var half = '';
var req = new GlideRecord('x_iem_tqa_work_request');
req.addEncodedQuery('state=1^ORstate=2^target_dateISNOTEMPTY');
req.query();

while (req.next()) {
target = req.target_date.getGlideObject();
submit = req.sys_created_on.getGlideObject();

// Calculate business seconds
finaldiff = getBusinessSecondsBetween(submit, target);
presentdiff = getBusinessSecondsBetween(now, target);
half = finaldiff / 2;

if (presentdiff > half) {
gs.info("More than half the business time left");
} else {
gs.info("Less than half the business time left");
}
}

 

 

  • getBusinessSecondsBetween() loops through each day between two dates.

  • It only adds seconds for weekdays (Monday to Friday).

  • Then we compare whether the remaining business time (presentdiff) is more than half of the total business duration.

 

Vishal Jaswal
Giga Sage
Giga Sage

Hello @MaharshiC 

var now = new GlideDateTime();
var target = '';
var submit = '';
var finaldiff = '';
var presentdiff = '';
var half = '';
var req = new GlideRecord('x_iem_tqa_work_request');
req.addEncodedQuery('state=1^ORstate=2^target_dateISNOTEMPTY');
req.query();
while (req.next()) {
   target = req.target_date.getGlideObject();
   submit = req.sys_created_on.getGlideObject();
   // Calculate business days between submit and target
   finaldiff = getBusinessDays(submit, target);
   presentdiff = getBusinessDays(now, target);
   half = finaldiff / 2;
   gs.info('---------------------------------------------');
   gs.info('Submit Date: ' + req.sys_created_on.getDisplayValue());
   gs.info('Target Date: ' + req.target_date.getDisplayValue());
   gs.info('Total Business Days (submit → target): ' + finaldiff);
   gs.info('Remaining Business Days (now → target): ' + presentdiff);
   gs.info('Half (business days): ' + half.toFixed(1));
  if (presentdiff > half) {
        gs.info('Decision: YES (More than half left)');

    } else {
        gs.info('Decision: NO (Half or less remaining)');
    }
}
// function to calculate business days (Mon–Fri)
function getBusinessDays(start, end) {
   var businessDays = 0;
   var tempDate = new GlideDateTime(start);
   var endDate = new GlideDateTime(end);
   while (tempDate.compareTo(endDate) < 0) {
       var dayOfWeek = tempDate.getDayOfWeekLocalTime(); // 1 = Sunday, 7 = Saturday
       if (dayOfWeek > 1 && dayOfWeek < 7) {
           businessDays++;
       }
       tempDate.addDaysLocalTime(1);
   }
   return businessDays;
}



VishalJaswal_0-1744651052163.png

 

 

 

VishalJaswal_0-1744651119587.png

 

 

 

 

 


Hope that helps!