- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-18-2019 05:24 PM
Hi guys,
I'm currently writing a script to calculate delivery date for CR based on man days entered by users as the following:
Man day | Delivery Days |
1 - 5 | 30 |
6 - 10 | 45 |
10 - 30 | 60 |
30 above | 90 |
However I notice that there's a behavior that if the CR is approved before 8:30am, it will calculate current day as 1 day whereas it is suppose to start counting the next day as first day. Can anyone help with the scripting to check if the time is before 8:30am it will add 31 days instead of 30?
Thanks in advance!
Jake
(function executeRule(current, previous /*null when async*/) {
// Add your code here
var update = current.sys_updated_on.getDisplayValue();
var gd = new GlideDate();
update = gd.getByFormat('yyyy-MM-dd'); //Format
var gDateTime = new GlideDateTime(current.sys_updated_on.getDisplayValue());
var gTime = gDateTime.getTime();
var time = gTime.getByFormat('HH:mm:ss');
//var getDateTime = new GlideDateTime(current.sys_updated_on);
//var gDate = getDateTime.getDate();
//var date = gDate.getByFormat('yyyy-MM-dd');
var DateTime = update + ' ' + time;
var days = current.u_estimated_total_mandays;
var plus = '';
// days less than 5 or equal 5
if(5 >= days){
plus = 30; // add 30 Calendar days
}
// days greater than 5 and days less than 10 or equal to 10
if(5 < days && days <= 10){
plus = 45; // add 45 Calendar days
}
// days greater than 10 and days less than 30 or equal to 30
if(10 < days && days <= 30){
plus = 60; // add 60 Calendar days
}
// days greater than 30
if(days > 30){
plus = 90; // add 90 Calendar days
}
var gdtDelivery = new GlideDateTime(DateTime);
gdtDelivery.addDays(plus);
current.u_delivery_date = gdtDelivery.getValue();
})(current, previous);
Solved! Go to Solution.
- Labels:
-
Best Practices

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-18-2019 10:08 PM
Hi Jake,
The issue with calculation before 8:30 AM is due to timezone difference. When you use GlideDateTime() to get current date it returns the date time value in GMT. It could be giving you last day's date before 8:30 AM. I assume you want to add the days to the current / that day's date to determine the delivery date. I don't understand the initial lines of code which are getting date and time separately to form a date.
If my assumption is correct, and you want to add days to current date based on the number of mandays selected, you could try the following script:
var days = current.u_estimated_total_mandays;
var plus = '';
// days less than 5 or equal 5
if(5 >= days){
plus = 30; // add 30 Calendar days
}
// days greater than 5 and days less than 10 or equal to 10
if(5 < days && days <= 10){
plus = 45; // add 45 Calendar days
}
// days greater than 10 and days less than 30 or equal to 30
if(10 < days && days <= 30){
plus = 60; // add 60 Calendar days
}
// days greater than 30
if(days > 30){
plus = 90; // add 90 Calendar days
}
//This will get the date based on GMT Timezone
var gdtDelivery = new GlideDateTime();
gdtDelivery.addDays(plus);
//getLocalDate will get the date converted to local timezone
current.u_delivery_date = gdtDelivery.getLocalDate();
Give it a try and see how it goes.
Thanks,
Manish

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-18-2019 09:43 PM
Hi,
Here is the script.
var currentDateTime = new GlideDateTime();
var nowTime = currentDateTime.getTime();
var nowTimeVal = notTime.getNumericValue();
var gTime = new GlideTime();
gTime.setValue('08:30:00');
var gTimeVal = gTime.getNumericValue();
if (nowTimeVal < gTimeVal)
gs.print("Before 8:30");
else
gs.print("after 8:30");

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-18-2019 10:08 PM
Hi Jake,
The issue with calculation before 8:30 AM is due to timezone difference. When you use GlideDateTime() to get current date it returns the date time value in GMT. It could be giving you last day's date before 8:30 AM. I assume you want to add the days to the current / that day's date to determine the delivery date. I don't understand the initial lines of code which are getting date and time separately to form a date.
If my assumption is correct, and you want to add days to current date based on the number of mandays selected, you could try the following script:
var days = current.u_estimated_total_mandays;
var plus = '';
// days less than 5 or equal 5
if(5 >= days){
plus = 30; // add 30 Calendar days
}
// days greater than 5 and days less than 10 or equal to 10
if(5 < days && days <= 10){
plus = 45; // add 45 Calendar days
}
// days greater than 10 and days less than 30 or equal to 30
if(10 < days && days <= 30){
plus = 60; // add 60 Calendar days
}
// days greater than 30
if(days > 30){
plus = 90; // add 90 Calendar days
}
//This will get the date based on GMT Timezone
var gdtDelivery = new GlideDateTime();
gdtDelivery.addDays(plus);
//getLocalDate will get the date converted to local timezone
current.u_delivery_date = gdtDelivery.getLocalDate();
Give it a try and see how it goes.
Thanks,
Manish
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-23-2019 11:37 PM
Hi Manish,
Thanks a lot! The script is working great.
However one more thing is that the current.u_delivery_date is stamped to 8am fixed.
Is there any way I could have the calculation goes 30 days down to minute or seconds?
For example:
Man days is entered at the time 01/01/19 15:30:00, the delivery date would be 30/01/19 15:30:00.