44 lines
1.2 KiB
C#
44 lines
1.2 KiB
C#
namespace Library;
|
|
|
|
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();
|
|
}
|
|
} |