- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-20-2021 01:43 AM
Hi All,
I have requirement where I have to calculate duration field (in days, hours, minutes,seconds)based on schedule(9-5, everyday). My script is not working and is given below :
durationUpdate();
function durationUpdate(){
var task = new GlideRecord('pm_project_task');
task.addEncodedQuery('sys_id=0d785fda916c5f00e485d6e0f11a9341');
task.query();
if(task.next()){
task.duration = elapsedDuration(task.start_date,task.end_date));
task.setWorkflow(false);
task.update();
}
}
function elapsedDuration(start,end){
var dc = new DurationCalculator();
dc.setSchedule('2efed6b8ec7e320056e1cc120a57cc1e'); //9-5 Schedule sys_id
var dur = dc.calcScheduleDuration(start, end);
var durationMS = dur*1000;
var result = new GlideDuration(dur);
return result;
}
This is giving me output in hours, minutes not in days,hours,minutes as desired
Can someone guide/help me here?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-23-2021 02:21 AM
Hi Vidya,
This script worked for me
test();
function test() {
var gr = new GlideRecord('task');
gr.addEncodedQuery('');
gr.query();
while (gr.next()) {
var schedule = new GlideSchedule();
schedule.load('2efed6b8ec7e320056e1cc120a57cc1e'); // my schedule sys_id
var resolveDuration = schedule.duration(gr.start_date.getGlideObject(), gr.end_date.getGlideObject());
gr.duration = outputScheduleDuration(resolveDuration).getDurationValue();
gr.setWorkflow(false);
gr.update();
}
}
function outputScheduleDuration(input_dur) {
var tag = false;
var add_day = 0;
var new_day = 0;
var new_hour = 0;
var new_minute = 0;
var dayLength = 8; // number of hours calculated as 1 day as per my schedule
var oneDay = (1 * dayLength * 60 * 60) * 1000;
var oneHour = (60 * 60) * 1000;
var oneMinute = 60 * 1000;
var value_calc = 0;
var timems = input_dur.getNumericValue();
if (timems > oneDay) {
value_calc = timems / oneDay;
new_day = parseInt(value_calc);
value_calc = (value_calc - new_day);
value_calc = value_calc * 8;
} else {
if (timems > oneHour) {
value_calc = timems / oneHour;
} else {
new_minute = timems / oneMinute;
tag = true;
}
}
if (!tag) {
new_hour = parseInt(value_calc);
value_calc = (value_calc - new_hour);
add_day = parseInt(new_hour / 8);
new_hour = new_hour - (add_day * 8);
new_day = new_day + add_day;
value_calc = value_calc * 60;
new_minute = parseInt(value_calc);
}
value_calc = ((new_day * (24 * 60 * 60 * 1000)) + (new_hour * (60 * 60 * 1000)) + (new_minute * (60 * 1000)));
var final_dur = input_dur;
final_dur.setNumericValue(value_calc);
return final_dur;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-22-2021 07:04 PM
Hi,
Were you able to find a solution for this. Please let me know.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-23-2021 02:21 AM
Hi Vidya,
This script worked for me
test();
function test() {
var gr = new GlideRecord('task');
gr.addEncodedQuery('');
gr.query();
while (gr.next()) {
var schedule = new GlideSchedule();
schedule.load('2efed6b8ec7e320056e1cc120a57cc1e'); // my schedule sys_id
var resolveDuration = schedule.duration(gr.start_date.getGlideObject(), gr.end_date.getGlideObject());
gr.duration = outputScheduleDuration(resolveDuration).getDurationValue();
gr.setWorkflow(false);
gr.update();
}
}
function outputScheduleDuration(input_dur) {
var tag = false;
var add_day = 0;
var new_day = 0;
var new_hour = 0;
var new_minute = 0;
var dayLength = 8; // number of hours calculated as 1 day as per my schedule
var oneDay = (1 * dayLength * 60 * 60) * 1000;
var oneHour = (60 * 60) * 1000;
var oneMinute = 60 * 1000;
var value_calc = 0;
var timems = input_dur.getNumericValue();
if (timems > oneDay) {
value_calc = timems / oneDay;
new_day = parseInt(value_calc);
value_calc = (value_calc - new_day);
value_calc = value_calc * 8;
} else {
if (timems > oneHour) {
value_calc = timems / oneHour;
} else {
new_minute = timems / oneMinute;
tag = true;
}
}
if (!tag) {
new_hour = parseInt(value_calc);
value_calc = (value_calc - new_hour);
add_day = parseInt(new_hour / 8);
new_hour = new_hour - (add_day * 8);
new_day = new_day + add_day;
value_calc = value_calc * 60;
new_minute = parseInt(value_calc);
}
value_calc = ((new_day * (24 * 60 * 60 * 1000)) + (new_hour * (60 * 60 * 1000)) + (new_minute * (60 * 1000)));
var final_dur = input_dur;
final_dur.setNumericValue(value_calc);
return final_dur;
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-22-2021 07:12 PM
Use below sample script:
var result = new GlideDuration();
result.setValue(durationMS);
gs.print(result.getDisplayValue()); // get display value - 34 Days 18 Hours 5 Minutes
gs.print(result.getByFormat("HH:mm:ss")); // get hour , minute & s- 18:05:06
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā04-23-2021 02:21 AM
Hi Anirudh,
This script worked for me
test();
function test() {
var gr = new GlideRecord('task');
gr.addEncodedQuery('');
gr.query();
while (gr.next()) {
var schedule = new GlideSchedule();
schedule.load('2efed6b8ec7e320056e1cc120a57cc1e'); // my schedule sys_id
var resolveDuration = schedule.duration(gr.start_date.getGlideObject(), gr.end_date.getGlideObject());
gr.duration = outputScheduleDuration(resolveDuration).getDurationValue();
gr.setWorkflow(false);
gr.update();
}
}
function outputScheduleDuration(input_dur) {
var tag = false;
var add_day = 0;
var new_day = 0;
var new_hour = 0;
var new_minute = 0;
var dayLength = 8; // number of hours calculated as 1 day as per my schedule
var oneDay = (1 * dayLength * 60 * 60) * 1000;
var oneHour = (60 * 60) * 1000;
var oneMinute = 60 * 1000;
var value_calc = 0;
var timems = input_dur.getNumericValue();
if (timems > oneDay) {
value_calc = timems / oneDay;
new_day = parseInt(value_calc);
value_calc = (value_calc - new_day);
value_calc = value_calc * 8;
} else {
if (timems > oneHour) {
value_calc = timems / oneHour;
} else {
new_minute = timems / oneMinute;
tag = true;
}
}
if (!tag) {
new_hour = parseInt(value_calc);
value_calc = (value_calc - new_hour);
add_day = parseInt(new_hour / 8);
new_hour = new_hour - (add_day * 8);
new_day = new_day + add_day;
value_calc = value_calc * 60;
new_minute = parseInt(value_calc);
}
value_calc = ((new_day * (24 * 60 * 60 * 1000)) + (new_hour * (60 * 60 * 1000)) + (new_minute * (60 * 1000)));
var final_dur = input_dur;
final_dur.setNumericValue(value_calc);
return final_dur;
}