Problem jest trywialny. Weź kartkę i długopis i rozrysuj sobie to:
Zakres daty sprawdzanej:
minDate, maxDate
Data zatrudnienia pracownika:
startDate, EndDate
Dla podpowiedzi sprawdź czy ciąg startDate, EndDate
zawiera się w startDate, EndDate
Tutaj przykład z EntityFramework (Sprawdzanie, czy rezerwacja pokoju o podanym starcie i zakończeniu zahacza o podany przedział czasu)
.Where(x => input.DateRange == null ? true :
(input.DateRange.DateFrom >= x.AccommodationFrom && input.DateRange.DateFrom <= x.AccommodationTo && input.DateRange.DateTo >= x.AccommodationFrom && input.DateRange.DateTo <= x.AccommodationTo) ||
(input.DateRange.DateFrom <= x.AccommodationFrom && input.DateRange.DateFrom <= x.AccommodationTo && input.DateRange.DateTo >= x.AccommodationFrom && input.DateRange.DateTo >= x.AccommodationTo) ||
(input.DateRange.DateFrom >= x.AccommodationFrom && input.DateRange.DateFrom <= x.AccommodationTo && input.DateRange.DateTo >= x.AccommodationFrom && input.DateRange.DateTo >= x.AccommodationTo) ||
(input.DateRange.DateFrom <= x.AccommodationFrom && input.DateRange.DateFrom <= x.AccommodationTo && input.DateRange.DateTo >= x.AccommodationFrom && input.DateRange.DateTo <= x.AccommodationTo)
)
x - Rezerwacja pokoju
input.DateRange - Przedział czasu do sprawdzenia