02. februar 2004 - 14:25Der er
13 kommentarer og 1 løsning
Dato-regning: Få vist en side afhængig af hvilken dato det er.
Halløj.
Jeg har bakset med at lave en funktion, hvor man får vist en side efter den aktuelle dato. Mere konkret, så har jeg flere enkelte sider der hver beskriver et show, og så skal man kunne klikke på f.eks. "Næste show", og så få vist det næste show. Hvert show har en dato, og hvis den aktuelle dato er senere end den pågældende showdato, får man vist den næste.
Jeg har sat en database op med et unikt ID og en dato for hvert show, og omregnet det hele til Epoch via PHP, men jeg kan ikke overskue hvordan jeg kan sammenligne Epoch-resultatet og få noget brugbart ud af det?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
echo("</table>"); echo("Aktuel dato i Epoch: $nu_epoch"); ?> <BR> Aktuel dato i MySQL: <?php echo("$nu"); ?>
</code>
Der må gerne grines af koden.. - jeg er ikke særlig snu til php :o)
Synes godt om
Slettet bruger
02. februar 2004 - 22:59#4
Jeg har såmænd set meget slemmere kode.
Første skridt på vejen til at få noget rigtigt godt ud af det her, er at skifte til at bruge et rigtigt datofelt i din database. Så kan MySQL nemlig selv lave sortering ud fra dato, og det vil gøre PHP-koden meget simplere.
opret en ny kolonne af typen DATE og kald den nydato Derefter kører du følgende script, der lige klarer konverteringen.
<?php
$dbcnx = @mysql_connect("localhost", "PASS", "USER"); $select = @mysql_select_db("test"); $result = mysql_query("SELECT id, dato FROM shows") or die(mysql_error());
while ( $row = mysql_fetch_array($result) ) { $split=explode("-",$row['dato']); $nydato=$split[2] . $split[1] . $split[0]; mysql_query("UPDATE shows SET nydato='$nydato' WHERE id='{$row['id']}'") or die (mysql_error()); }
?>
Synes godt om
Slettet bruger
02. februar 2004 - 23:08#5
Du har nu to datofelter. Hvis det ser ud til at nydato indeholder det rigtige hele vejen, kan du slette den gamle kolonne og omdøbe den ny til at hedde dato.
Bagefter kan du i dine SQL-sætninger bruge SELECT UNIX_TIMESTAMP(dato) AS dato, og så vil MySQL selv lave værdien om til noget, som PHP umiddelbart kan arbejde med.
Forresten lavede du lidt mange krumspring for at få din epoch-værdi for tiden lige nu. Det er ikke sværere end bare at sige:
$nu=time();
Den behøver altså ikke blive formateret, splittet op, og genbygget. Den er allerede i det rette format.
Ok - det er gjort. Mit gamle datofelt var nu også af typen DATE, men jeg var ikke klar over at man kunne lave det SELECT UNIX.. osv. Det gør det jo lidt nemmere.
Ja, jeg kan godt se at epoch/nu-tiden bliver revet lidt rundt :) Så har jeg lært noget.
Hvad kan jeg så gøre hvis jeg vil sammenligne den aktuelle dato med datoerne i databasen?
Ok, prøvede selv lige at lave en query i min database og fandt ud af at du skal fjerne apostrofferne i date('Y-m-d').
Så det skal altså hedde date(Y-m-d).
Hvis du så vil have fat i en fremtidig dato, kan du prøve følgende:
$result = mysql_query("SELECT id, nydato FROM shows WHERE nydato < 'date(Y-m-d)' ORDER BY nydato LIMIT 0,1") or die(mysql_error());
Synes godt om
Slettet bruger
03. februar 2004 - 14:33#9
Hvis du vil hente alt fra idag, kan du bruge:
SELECT id, data FROM shows WHERE TO_DAYS(dato)=TO_DAYS(NOW())
Fra idag og fremover:
SELECT id, data FROM shows WHERE TO_DAYS(dato)>=TO_DAYS(NOW())
TO_DAYS er nødvendig, for når datofeltet sammenlignes med NOW(), bliver den set på som midnat ved starten af den dato, og midnat idag er naturligvis ikke lig med nu.
$dbcnx = @mysql_connect("localhost", "user", "pass"); $select = @mysql_select_db("test"); $result = mysql_query("SELECT id, dato FROM shows WHERE TO_DAYS(dato)>=TO_DAYS(NOW())") or die(mysql_error());
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.