- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2025 09:23 AM
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');
}
}
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2025 10:06 AM - edited 04-14-2025 10:18 AM
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;
}
Hope that helps!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2025 10:00 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2025 10:06 AM - edited 04-14-2025 10:18 AM
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;
}
Hope that helps!