Avatar billede hkb-x Nybegynder
25. juli 2005 - 22:57 Der er 14 kommentarer og
1 løsning

før, nu og efter med DATETIME

i min database har jeg en list over events... tiden for disse events er skrevet med DATETIME. jeg vil gerne kunne se forskel på kommende og overståede events men hvordan kan jeg sammenligne datetime for nu med den i databasen?
Avatar billede kdjweb Nybegynder
26. juli 2005 - 00:14 #1
http://dk2.php.net/manual/en/function.mktime.php

denne funktion laver det hele om til sekunder så du kan sammenligne.
Avatar billede hmortensen Nybegynder
26. juli 2005 - 02:49 #2
//Kommende
SELECT noget FROM tabel WHERE dato > NOW()
//Overståede
SELECT noget FROM tabel WHERE dato =< NOW()
Avatar billede Slettet bruger
27. juli 2005 - 18:29 #3
kdjweb:
Når vi nu snakker database (går ud fra MySQL) er det noget smartere at bruge MySQLs indbyggede UNIX_TIMESTAMP()-funktion, som leverer et tal af nøjagtig samme type som mktime(), men uden at man først skal splitte datoen op i enkeltdele.
Avatar billede kdjweb Nybegynder
27. juli 2005 - 22:43 #4
sandbox.. man kunne jo altid lave en funktion og slippe for mysql kaos
Avatar billede Slettet bruger
27. juli 2005 - 23:08 #5
Kaos?

SELECT UNIX_TIMESTAMP(datofelt) AS dato FROM tabel

Det kan da ikke være meget lettere. Det giver tallet i sekunder ligesom mktime kan lave, så det kan benyttes til date() og den slags.

Derudover er det hmortensen, der har ret. Hvis man skulle kunne bruge mktime til noget, skulle man jo hente hele tabellen over i PHP og derefter lade sit script sortere og fravælge. Det er en vildt ineffektiv metode, når man kan gøre det direkte i queryen.

Hvis man ønsker at hive hele tabellen ud alligevel, eller ønsker at hive et tabeludsnit ud, som måske overlapper det aktuelle tidspunkt, er det dog smart nok at lave sammenligningen i PHP, og så er MySQL-funktionen noget lettere at have med at gøre end mktime. Et eksempel:

$nu=time();
$udskrift="<ul>";
$res=mysql_query("SELECT UNIX_TIMESTAMP(datofelt) AS dato FROM tabel ORDER BY datofelt");
while($row=mysql_fetch_assoc($res)){
  $udskrift .= ($nu<$row['dato']) ? '<li style="color:red">' : '<li style="color:blue">' ;
  $udskrift .= date('Y-m-d H:i:s', $row['dato']) . '</li>';
}
$udskrift .= '</ul>';
echo $udskrift;
Avatar billede hkb-x Nybegynder
28. juli 2005 - 14:43 #6
til: kdjweb

tak... det virkede... skriv et svar for point...

og til jer andre:
jeg har eksperimenteret lidt med jeres metoder også og de er også ganske gode... men kdjweb var nu engang først...

så tak til alle...
Avatar billede kdjweb Nybegynder
28. juli 2005 - 15:12 #7
sandbox, vil ikke diskuterer det her, man har vær sin måde at kode på, og jeg vælger den jeg synes er nemmest og hurtigst.

hkb-x gør jeg så :)
Avatar billede kdjweb Nybegynder
28. juli 2005 - 16:28 #8
tak for point
Avatar billede hmortensen Nybegynder
28. juli 2005 - 16:34 #9
Hurtigst for afvikling, eller at skrive ?
Avatar billede hkb-x Nybegynder
28. juli 2005 - 16:37 #10
hurtigst til at skrive,... jeg ved både dit og sandboxses virker bedrer men jeg fik løst mit problem viaf hans forslag... så jeg mener det ville være forkert ikke at give ham de point... hans forslag har også gjordt mange andre ting lettere for mig da jeg ike kende til mktime()...
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:11 #11
jeg føler mig nedgjort i dette spm. men jeg holder mig til mktime() og det er der mange grunde til. jeg vil stadig mene at mktime() er den bedste funktion til at sammenligne.
Avatar billede hmortensen Nybegynder
28. juli 2005 - 17:28 #12
kdjweb, det skal du ikke føle dig. sandbox og jeg prøver blot at finde frem til den mest optimale løsning i den pågældende situation.
Avatar billede Slettet bruger
28. juli 2005 - 18:04 #13
Det var så absolut ikke meningen at nedgøre nogen.

Og mktime() er en fin funktion, som jeg også har brugt mange gange - jeg synes bare, der er andre metoder, der er mere effektive i denne sammenhæng.

F.eks: Hvis du har en DATETIME-streng i $dato (2005-07-28 17:28:10 eller 20050728172810) kan den laves om til et timestamp med strtotime() http://dk.php.net/manual/da/function.strtotime.php uden at skulle splittes op først.

mktime() ville jeg derimod bruge, hvis jeg skulle lave en dato fra felter i en formular om til et timestamp.
Avatar billede kdjweb Nybegynder
28. juli 2005 - 18:11 #14
list($dato,$tid) = explode(" ",$datetime);
 
  list($aar,$maaned,$dag) = explode("-",$dato);
 
  list($time,$minut,$sekund) = explode(":",$tid);
 
  $tstamp = mktime($time,$minut,$sekund,$maaned,$dag,$aar);

det er hurtigt og nemt og alle ville kunne forstå det
Avatar billede Slettet bruger
28. juli 2005 - 19:05 #15
Ja, men efter min mening er det lettere at bruge en af disse:

UNIX_TIMESTAMP i SQL-koden. Så får man den værdi, man øsker uden at skulle konvertere den overhovedet.

eller

$tstamp = strtotime($datetime);

Hvis man alligevel skal bruge enkeltbestanddelene af tidspunktet, kan din metode være smart nok, men ellers synes jeg de andre er bedre.
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