Hello,
Server and App details:
Jira Data Center Installed version: 8.22.6
Adaptavist ScriptRunner Installed version: 8.14.0
I found this script on the adaptavist library and it works great. Is there a way to exclude weekends from the duration? Any help would be appreciated as I'm not that great at coding. script below:
import com.atlassian.jira.component.ComponentAccessor
import java.sql.Timestamp
import java.time.temporal.ChronoUnit
// Get the required component
def customFieldManager = ComponentAccessor.customFieldManager
// The name of the lower date custom field
final String lowerDateCustomFieldName = "Start Date/Time"
// The name of the higher date custom field
final String higherDateCustomFieldName = "Resolution Date/Time"
// Get the custom field objects
def lowerDateCustomField = customFieldManager.getCustomFieldObjects(issue).find { it.name == lowerDateCustomFieldName }
def higherDateCustomField = customFieldManager.getCustomFieldObjects(issue).find { it.name == higherDateCustomFieldName }
if (!lowerDateCustomField || !higherDateCustomField) {
log.info "Could not find one ore more of the provided custom fields"
return null
}
// Get the date values from both issues
def lowerDateValue = issue.getCustomFieldValue(lowerDateCustomField) as Timestamp
def higherDateValue = issue.getCustomFieldValue(higherDateCustomField) as Timestamp
// Transform both values to instants
def lowerDateInstant = lowerDateValue?.toInstant()
def higherDateInstant = higherDateValue?.toInstant()
// Change the chrono unit to obtain the difference in other time unit.
final chronoUnit = ChronoUnit.SECONDS
// Calculate the difference between the lower and the higher date.
lowerDateInstant && higherDateInstant ? chronoUnit.between(lowerDateInstant, higherDateInstant) : null
If you want to exclude Saturday and Sunday from the date range, you could try something like this:-
import java.time.LocalDate
import java.time.DayOfWeek
int countDaysWithoutWeekend(LocalDate startDate, LocalDate endDate) {
int count = 0
for (def date = startDate; date.isBefore(endDate.plusDays(1)); date = date.plusDays(1)) {
// Check if the current date is a weekend (Saturday or Sunday)
if (date.dayOfWeek != DayOfWeek.SATURDAY && date.dayOfWeek != DayOfWeek.SUNDAY) {
count++
}
}
count
}
def start = LocalDate.of(2023, 1, 1)
def end = LocalDate.of(2023, 1, 10)
int daysWithoutWeekend = countDaysWithoutWeekend(start, end)
log.warn "Number of days between $start and $end (excluding weekends): ${daysWithoutWeekend}"
Please note that the sample code above is not 100% exact to your environment. Hence, you will need to make the required modifications.
Once you have included the method above, you can use it to calculate the total number of working days for the date range you have provided, i.e. excluding the weekend.
I hope this helps to solve your question. :-)
Thank you and Kind regards,
Ram
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.