Question

Je fais un système de réservation où les utilisateurs peuvent prendre rendez-vous avec l'autre. Ce que je dois faire est de faire en sorte que les réunions ne se heurtent pas le temps sage.

Par exemple: Réunion 1 est 13h00-14h00. Réunion 2 est 13:30-14:30.

Ces réunions clash et donc la réservation ne devrait pas être.

Maintenant, quand j'essaie de faire ce que je ne reçois pas le résultat souhaité, parfois, il pense que la réservation ne doit pas être fait quand il ne devrait vraiment, et vice versa.

Voici mon code:

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;
                    }
                }

Le principal problème semble être la ((Clash1 > 0) || (Clash2 < 0)) instruction if comme quand une réservation doit être le premier si les jeux de déclaration disponible sur true (comme il se doit) mais cette instruction if met alors à false.

Comment puis-je effectuer ces contrôles correctement pour vous assurer que le temps ne se heurtent pas?

Était-ce utile?

La solution

Essayez ceci:

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

Available = !clashing;

Voir aussi:

déterminer si deux plages de dates Overlap

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top