Avatar billede MoodyJerup Novice
22. oktober 2011 - 12:44 Der er 4 kommentarer og
1 løsning

Finde dato-konflikter med unixtime

Hejsa,

jeg står og er igang med et reservationssystem, og mangler en skide god idé til at tjekke, om forskellige bookninger konflikter med hinanden.

Fx har jeg en bookning fra StartUnixTime1 til SlutUnixTime1

Og en anden bookning fra StartUnixTime2 til SlutUnixTime2

Det jeg så skal have lavet er en funktion, som tjekker om der er dage, hvor de overlapper, og dernæst spytter disse dage ud i en string.

Kan nogen hjælpe mig?
22. oktober 2011 - 13:42 #1
Du må nok fortælle lidt mere før jeg kan fatte det.  Hvordan kender du start-tiden og slut-tiden for de enkelte bookings?  Gemmer du dem i en database tabel?  I så fald vis en create-script for tabellen eller fortæl hvilke felter der er og hvad datatypen er for felterne.

Og i hvilken situation er det så du skal tjekke om en reservation overlapper andre reservationer?  Er det således, at før du indfører en ny reservation i database tabellen skal du have en query til at undersøge om den nye reservation overlapper en eller flere af de bestående reservationer, og hvis den nye reservation overlapper bestående reservationer skal du have en liste af de reservationer der overlappes?

Hvis du svarer udførligt på dette, så har jeg en chance for at hjælpe.
Avatar billede MoodyJerup Novice
22. oktober 2011 - 13:49 #2
Hej Christian,

Tiderne står i en reservations tabel.

Men det skal ende ud som et "tjekke-script", som bare går ind og kigger og sammenligner en række tider (som er unixtime), og så giver mig et output om dage, hvor de er ens (dvs. de overlapper).

Jeg behøver ikke et fuldstændigt script, bare en inspiration til, hvordan en metode til en "simpel" funktion kan være.

Den skal jo kun tage højde for 4 variabler - Start og Sluttid på den ene bookning og Start- og sluttid på den anden bookning.

Hvis du eller nogen kan finde en algoritme eller inspiration til sådan en, der blot tjekker overlap, så vil jeg blive lykkelig.
22. oktober 2011 - 15:37 #3
Det ville du ikke svare på (jeg stillede nogle temmeligt præcise spørgsmål, men bortset fra at fortælle, at der er en tabel springer du mine spørgsmål over.)  Det er helt i orden, men så stopper jeg her.  Så må vi håbe du finder hjælp fra medlemmer der er bedre til at gætte end jeg.
Avatar billede MoodyJerup Novice
22. oktober 2011 - 15:38 #4
Nårh, fandt ud af det selv :-)

                function check_timerange_conflics($MainTimeStart,$MainTimeEnd,$ComparedTimeStart,$ComparedTimeEnd) {
               
                    for($i=$MainTimeStart;$i<$MainTimeEnd+86400;$i += 86400) {
                   
                        $array_main[] .=  normaltime($i,3);
                       
                    }
                   
                    for($j=$ComparedTimeStart;$j<$ComparedTimeEnd+86400;$j += 86400) {
                   
                        $array_comp[] .=  normaltime($j,3);
                       
                    }
                                       
                    $array_matches = array_intersect($array_main, $array_comp);
                   
                    if (sizeof($array_matches)>0) {
                        return true;
                    } else {
                        return false;
                    }
                }

normaltime() er en funktion, som laver unixtime om til fx 24-12-2011, så det kan sammenlignes.
Avatar billede The_Buzz Novice
22. oktober 2011 - 16:35 #5
Heh, man lærer mest ved at løse problemerne selv :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester