Official scheduleAPI ServiceNow provided a method add.
Scoped GlideSchedule - add (GlideDateTime startDate, GlideDuration offSet)
*parameter1:
Name:startDate
Type:GlideDateTime
Description:The starting date of the new schedule segment.
parameter2:
Name:offSet
Type:GlideDuration
Description:The time offset of the new schedule segment.*
example:
var startDate = new GlideDateTime('2014-01-02');
var days = 2;
var dur = new GlideDuration(60 * 60 * 24 * 1000 * days);
var schedule = new GlideSchedule();
var end = schedule.add(startDate, dur);
gs.info(end);
//Output: 2014-01-04 00:00:00
However, this method can not be less than zero parameter2 duration. So we can only use this method in seeking schedule a future date, the date can not be projected forward.
name problem came when we want to schedule in three days (schedule in three days rather than three calendar days) before a specific date date should be how to do it?
On dry ok below.
Ideas :
1 GlideDateTime.addDaysLocalTime () parameter can be negative;
2 simply using a for loop;
/**
endTime is string
workDay type is int
**/
this._schedule = ‘*******************’;
getWorkDateInSchedule: function(endTime,workDay){
var inter = 1;
if(workDay<0){
//workDay <0 特定日期往前推
inter = -1;
var workDayABS = Math.abs(workDay);
var gt_end = new GlideDateTime(endTime);
var sched = new GlideSchedule(this._schedule);
var startWorkDate;
var inte = 0;
for(var i = 0; ; i++){
//GlideDateTime.addDaysLocalTime() 参数可以为负数;
gt_end.addDaysLocalTime(inter);
if(sched.isInSchedule(gt_end)){
inte = inte + 1;
}
if(inte == workDayABS){
break;
}
}
startWorkDate = gt_end;
return startWorkDate.getDate().toString();
}
else{
// workDay > 0 特定日期往后推时就调用官方api
var schedule = new GlideSchedule(this._schedule);
var end = schedule.add(endTime, dur);
return = end.getDate().toString();
}
},