// calculation result float cruise_time = 39.123; DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; OffsetDateTime departure_at = OffsetDateTime.parse(params.departure_at, formatter); OffsetDateTime arrive_at = OffsetDateTime.from(departure_at).plusMinutes((long)cruise_time); boolean is_available = true; for(int i = 0; i < doc['unavailability'].length; i++) { if(doc['unavailability'][i].starts_at !== null) { OffsetDateTime starts_at = OffsetDateTime.parse(doc['unavailability'][i].starts_at, formatter); OffsetDateTime ends_at = OffsetDateTime.parse(doc['unavailability'][i].ends_at, formatter); if( (starts_at.isAfter(departure_at) && starts_at.isBefore(arrive_at)) || (ends_at.isAfter(departure_at) && ends_at.isBefore(arrive_at)) || (starts_at.isAfter(departure_at) && ends_at.isBefore(arrive_at)) || (starts_at.isBefore(departure_at) && ends_at.isAfter(arrive_at)) ) { is_available = false; } } } return is_available;