我正在建立一个预订系统,用户可以在这里预约。 我需要做的是确保会议不会在时间上发生冲突。
例如: 会议1从13:00到14:00。 会议2的时间是13:30至14:30。
这些会议发生冲突,因此不应进行预订。
现在,当我尝试这样做时,我没有得到理想的结果,有时它认为不应该在真正应该的时候进行预订,反之亦然。
这是我的代码:
if (OldBookingDate.Equals(NewBookingDate))
{
// Check if (OldBookingTime -> OldEndTime) clashes with (NewBookingTime -> NewEndTime)
// For Example (10:00 -> 12:00), (09:00 -> 11:00)
// So this Clashes!
DateTime OldBookingTime_End = OldBookingTime_Start.AddHours(OldDurationInt);
DateTime NewBookingTime_End = NewBookingTime_Start.AddHours(NewDurationInt);
int Clash1 = OldBookingTime_Start.CompareTo(NewBookingTime_Start);
int Clash2 = OldBookingTime_End.CompareTo(NewBookingTime_End);
if ((Clash1 < 0) || (Clash2 > 0))
{
// If Clash1 -> Finishes before Meeting
// If Clash2 -> Finishes after Meeting
Available = true;
}
if ((Clash1 == 0) || (Clash2 == 0))
{
// Start and end is the same
Available = false;
}
if ((Clash1 > 0) || (Clash2 < 0))
{
// Intersects/Clashes with already booked meeting
Available = false;
}
}
主要问题似乎是((Clash1 > 0) || (Clash2 < 0))
if语句,因为当预订应该是第一个if语句集可用于true(应该如此)时,然后这个if语句将其设置为false。
我如何正确执行这些检查以确保时间不会发生冲突?
答案 0 :(得分:1)
试试这个:
bool clashing = (OldBookingTime_Start <= NewBookingTime_End)
&& (NewBookingTime_Start >= OldBookTime_End);
Available = !clashing;
另见: