25. juli 2005 - 22:57Der 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?
//Kommende SELECT noget FROM tabel WHERE dato > NOW() //Overståede SELECT noget FROM tabel WHERE dato =< NOW()
Synes godt om
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.
sandbox.. man kunne jo altid lave en funktion og slippe for mysql kaos
Synes godt om
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;
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()...
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.
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.
Synes godt om
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.
det er hurtigt og nemt og alle ville kunne forstå det
Synes godt om
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.
Synes godt om
Ny brugerNybegynder
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.