1

ユーザー同士で予約できる予約システムを作っています。私がしなければならないことは、会議が時間的に衝突しないようにすることです.

例: ミーティング 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 に設定します。

これらのチェックを適切に実行して、時間が衝突しないようにするにはどうすればよいですか?

4

1 に答える 1

1

これを試して:

bool clashing = (OldBookingTime_Start <= NewBookingTime_End)
             && (NewBookingTime_Start >= OldBookTime_End);

Available = !clashing;

以下も参照してください。

2 つの日付範囲が重複しているかどうかを判断する

于 2012-02-19T14:22:29.720 に答える