Во-первых, вам придется отсортировать массив или, по крайней мере, сделать отсортированную копию, если важно сохранить порядок в исходном списке. Если вы этого не сделаете, это не будет легко.
Затем найдите индекс элемента, который вы проверяете. Как только вы это сделаете, создайте цикл, идущий вперед и один назад в вашем массиве, и посчитайте дату, которую вы достигли в цикле, если две даты последовательны; в противном случае остановите этот цикл (и выполните другой цикл, если вы этого еще не сделали).
Это предполагает, что все дней в диапазоне, который вы ищете, можно найти в списке, включая выходные и праздничные дни.
РЕДАКТИРОВАТЬ: Если вы хотите косвенно включить выходные дни, вам нужно будет проверить день недели, используя DayOfWeek , итерируя по дням. Простейший способ сделать это, вероятно, также сохранить переменную для следующего ожидаемого дня; каждую итерацию в цикле вы добавляете (или вычитаете, когда перемещаетесь назад по отсортированному массиву) один день. Если день обработки - пятница (или понедельник при движении назад), добавьте / вычтите еще 2 дня, чтобы пропустить выходные.
Вот основная идея (не проверено, но вы должны получить точку). Я предполагаю, что вы уже отсортировали dates
и что вы нашли начальную дату в вашем массиве (с индексом i
). Для простоты я также предполагаю, что vacationDateToCheck
никогда не бывает субботой или воскресеньем; если это может быть один из них, вам придется соответственно отрегулировать.
DateTime expectedDate = vacationDateToCheck.AddDays(1);
if (vacationDateToCheck.DayOfWeek == DayOfWeek.Friday)
expectedDate = expectedDate.AddDays(2);
DateTime startDate = vacationDateToCheck;
DateTime endDate = vacationDateToCheck;
for (int j = i + 1; i < dates.Length; i++) {
if (dates[i] == expectedDate) {
endDate = dates[i];
expectedDate = dates[i].AddDays(1);
if (dates[i].DayOfWeek == DayOfWeek.Friday)
expectedDate = expectedDate.AddDays(2);
}
else
{
break;
}
}
Итерация по другому пути аналогична, вместо этого вы добавляете -1 и -2 дня и проверяете, является ли день недели понедельником.