Как отключить забронированные временные интервалы из списка временных интервалов рабочего времени
Друзья,
Я работаю над проектом по бронированию встреч, детали: рабочий час начинается с 9:00 до 7:00 с продолжительностью по умолчанию 30 минут. Итак, слоты начинаются как (9:00, 9:30, 10:00.... 7:00).
Здесь, чтобы показать доступные слоты, я использую следующую логику.
- Сохранение всех слотов продолжительностью 30 минут в списке (СПИСОК А), например [9:00, 9:30, 10:00, 10:30,... 7:00]
- Цикл по зарегистрированным встречам (содержит время начала и окончания), и если время начала совпадает с любым из элементов LIST A, я ', удаляя этот элемент из этого списка. и цикл продолжается.
Здесь проблема в том, рассмотрим, если встреча забронирована 9: 30-10: 00. Исходя из моей логики, 9:30 соответствует элементу LIST A, и он удалит 9:30 из этого списка.
Таким образом, доступные слоты будут отображаться как [9:00, X,10:00, 10:30, .... 7:00]. На самом деле это должно быть [9:00, 9:30, 10:30, 11:00... 7:00]
Вместо отображения доступных слотов 9:00-9:30, 10:30-11:00 он показывает 9:00-10:00, 10:30-11 с 9:30 удаляется из списка.,
Пожалуйста, помогите решить эту проблему или предложите мне несколько альтернативных подходов к этой проблеме. Сильно нужен.
2 ответа
То, что вы путаете, это то, что вы берете время начала второго слота как время окончания первого слота. Поэтому вместо того, чтобы делать это, вы можете сохранить время и продолжительность запуска.
И чтобы просто вычислить время окончания, вы делаете
StartTime.AddMinutes(30);
И добавить еще один комментарий в конце; Вы пытаетесь построить очень жесткую структуру. И возникнут проблемы, если вы попытаетесь расширить приложение, ИМХО.
Я предлагаю вместо использования одномерного массива использовать многомерный массив как
[[9:00][9:30],[9:30][10:00],[10:00][10:30], .... nth Item]
Здесь логика должна быть такой
var start=[start time]
var end=[end time]
var duration=[duration]
for (i=start;i<end;i+=duration)
{
if(start==A[i][0])
remove(A[i][0]);
}
A.sort();
return A;