Avatar billede ohmish Nybegynder
04. juni 2003 - 19:03 Der er 10 kommentarer og
2 løsninger

MySQL/PHP: Forskellen mellem to tider (ikke datoer)

jeg har lavet et bookersystem. hurrah ku man sige...
meeeen.. jeg ka itt hitt ud af hvordan jeg sammenligner tidspunkter korrekt.

Lige nu bruger jeg:

$nyfra = $fraen. ":" .$frato. ":00";
$nytil = $tilen. ":" .$tilto. ":00";

($nyfra vil f.eks give: 14:30:00 osv.)

checkdato = @mysql_query("SELECT id from booker WHERE dato='$dato' AND ((fra BETWEEN '$nyfra' AND '$nytil') OR (til BETWEEN '$nyfra' AND '$nytil') OR (fra<'$nyfra' AND til>'$nytil'))");
if (@mysql_num_rows($checkdato)>0) { echo "reserveret"; }

i databasen har jeg felterne:
  dato date NOT NULL default '0000-00-00',
  fra time NOT NULL default '00:00:00',
  til time NOT NULL default '00:00:00'

Og det virker sådan set fint nok og det hele... MEN hvis en bruger vil booke en dato i tidsrummet kl. 10:30:00 til 12:00:00, og der i forvejen er booket i en tid fra 12:00:00 til 14:00:00... så går det galt. Men det er jo IKKE i samme tidsrum.

Det skulle gerne være sådan at man ka booke helt tæt på en anden tid, med samme enten slut- eller starttid. Jeg har prøvet at trække et sekund til og fra hver tid, uden held. Jeg vil helst undgå flere where-kriterier.
Hvad gør jeg? Jeg er frisk på at ændre mit grund-setup.
Avatar billede zeled Nybegynder
04. juni 2003 - 19:11 #1
Kan klart anbefale at du ikke bruger MySQL's tidstempling.

brug hellere PHPs istedet. Lav tids felterne om til INT (14) og brug mktime().

Det vil give dig et heltal som er lettere at arbejde med i php end mysql's timestamp.
Avatar billede roenving Novice
04. juni 2003 - 19:11 #2
OR (fra=<'$nyfra' AND til>='$nytil'))");
Avatar billede ohmish Nybegynder
04. juni 2003 - 19:17 #3
roenving> det du siger der, forstærker jo nærmest det jeg IKKE vil have.

zeled> ka du forklare lidt hvordan jeg gør? har aldrig brugt det stads.
Avatar billede ohmish Nybegynder
04. juni 2003 - 19:21 #4
det nemmeste ville være hvis jeg ku få en løsning på hvordan jeg f.eks trækker et sekund fra "12:00:00" og lægger et sekund til "10:30:00". jeg har ledt overalt.. hvor svært ka det være?

med date("Y-m-d", (time()-1)) er det jo let nok. men hva med tid alene?
Avatar billede zeled Nybegynder
04. juni 2003 - 19:22 #5
når du indsætter i din DB så skal du bruge mktime() funktionen til at lave tiden med. mktime har den finesse at den angiver tiden i sekunder fra 01/01/1970.

Du bruger herefter date() funktionen til at vise datoen på en side.
Avatar billede zeled Nybegynder
04. juni 2003 - 19:26 #6
Avatar billede ohmish Nybegynder
04. juni 2003 - 19:47 #7
ok.. jeg havde overvejet den løsning faktisk. men det MÅ da være muligt at bruge normalt time...

jeg lader den lige stå noget tid endnu
Avatar billede ohmish Nybegynder
04. juni 2003 - 19:56 #8
hmmm mktime...

det er vel samme princip som:
echo date("d-m-Y H:i", strtotime("2001-02-13 11:23:00")); ?
Avatar billede ohmish Nybegynder
04. juni 2003 - 20:12 #9
mktime er ikke sommer/vintertids-kompatibelt!?

php.net manualen er fuld af advarsler og "pas på når du bruger bla bla" mht. mktime.. hmmmm!
Avatar billede ohmish Nybegynder
04. juni 2003 - 20:22 #10
Løsningen for mig blev:

$nyfra = date("H:i:s", strtotime($fraen. ":" .$frato. ":00")+1);
$nytil = date("H:i:s", strtotime($tilen. ":" .$tilto. ":00")-1);

virker perfekt
Avatar billede ohmish Nybegynder
04. juni 2003 - 20:23 #11
zeled>
du fik mig på rette sti.. læg et svar. så får du lidt point :)
Avatar billede zeled Nybegynder
04. juni 2003 - 23:31 #12
Er det ikke rart :D

Najs at du fik det til at køre
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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