demo040225_version2/ClassLibrary/Class1.cs
2025-05-06 10:41:15 +03:00

47 lines
1.4 KiB
C#

namespace ClassLibrary;
public class Calculations
{
public static string[] AvailablePeriods(
TimeSpan[] startTimes,
int[] durations,
TimeSpan beginWorkingTime,
TimeSpan endWorkingTime,
int consultationTime)
{
// Список занятых интервалов
var busy = new List<(DateTime Start, DateTime End)>();
for (int i = 0; i < startTimes.Length; i++)
{
var start = DateTime.Today.Add(startTimes[i]);
var end = start.AddMinutes(durations[i]);
busy.Add((start, end));
}
// Рабочее время
var workStart = DateTime.Today.Add(beginWorkingTime);
var workEnd = DateTime.Today.Add(endWorkingTime);
// Разбиваем на слоты
var result = new List<string>();
var current = workStart;
while (current.AddMinutes(consultationTime) <= workEnd)
{
var slotEnd = current.AddMinutes(consultationTime);
bool isOverlapping = busy.Any(b =>
current < b.End && slotEnd > b.Start // перекрытие
);
if (!isOverlapping)
{
result.Add($"{current:HH:mm}-{slotEnd:HH:mm}");
}
current = slotEnd; // шаг по времени строго по длительности
}
return result.ToArray();
}
}