如何从营业时间列表列表中禁用已预订的时间段

时间:2012-11-09 16:34:36

标签: c# asp.net duration appointment timeslots

我正在预约预约项目,详情如下: 营业时间从 9:00 开始到 7:00 ,默认持续时间 30分钟。所以,老虎机开始像(9:00,9:30,10:00~7:00)。

这里,为了显示可用的插槽,我正在使用以下逻辑。

  1. 将所有插槽中 30分钟的持续时间存储在列表中(列表A ),如[9:00,9:30,10:00,10:30, ...... 7:00]
  2. 循环预约约会(包含开始和结束时间),如果开始时间与任何 LIST A 元素匹配,我',从中删除该元素名单。和循环继续。
  3. 这里的问题是,考虑如果预约 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 个答案:

答案 0 :(得分:2)

你正在混淆的是,你将第二个插槽的开始时间作为第一个插槽的结束时间。所以,不要这样做,你可以做的是存储开始时间和持续时间。

要简单地计算结束时间,你可以

StartTime.AddMinutes(30);

最后再添加一条评论;你正试图建立一个非常严格的结构。如果你试图扩展应用程序,将面临问题,恕我直言。

答案 1 :(得分:2)

我建议,不要使用单维数组,而是使用像

这样的多维数组
[[9:00][9:30],[9:30][10:00],[10:00][10:30], .... nth Item] 

这里,Logic应该是这样的

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;