Avatar billede masteraaen Novice
18. november 2010 - 22:38 Der er 7 kommentarer og
1 løsning

PHP mysql - datoformat jeg kan "regne" med

Hej.

Jeg arbejder med et php og mysql site, hvor jeg har brug for nogle udtræk med datoafgrænsninger.

Hvordan gør jeg smartest, når jeg vil være sikker på altid at ramme rigtigt?

Det skal være sådan, at jeg kan trække data ud, hvis de har en dato senere end fx 14-05-2010 osv. Den kan vel ikke regne med det format xx-xx-xxxx - derfor skal det vel omregnes til et tal, lidt á la den måde excel bruger dato på?

Data ligger p.t. i mysql databasen som standard-dato lagringen dvs. yyyy-mm-dd (hvilket i øvrigt også er et træls format - det vender jo omvendt!)
:-)

På forhånd tak.
Avatar billede erikjacobsen Ekspert
18. november 2010 - 23:12 #1
Det er ganske simpelt: Du beholder formatet yyyy-mm-dd i databasen, for så kan du bruge datofunktioner i mysql til at foretage forskellige beregninger på datoen.

Når du så viser en dato, eller får indtastet en dato, så "vender" du den lige om.
Avatar billede webweaver Praktikant
18. november 2010 - 23:35 #2
Skal du foretage noget kode, hvis en dato er senere end 14-05-2010 eller skal du trække de rækker ud i din database, hvor en dato er senere end 14-05-2010?
Avatar billede showsource Seniormester
19. november 2010 - 09:09 #3
Avatar billede mrgumble Nybegynder
19. november 2010 - 09:13 #4
Læs her om dato- og tidsdatatyper i MySQL: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html

Du skal blot angive datatypen DATE eller DATETIME (hhv. uden og med tidspunkt) for det pågældende felt. Når du så vil filtrere på rækker efter en bestemt dato, skriver du blot:
[code]SELECT * FROM table WHERE mindato > 2001-19-02;[/code]
(& gt; skal erstattes med >)

At tallene vender omvendt er faktisk ganske praktisk - en masse datoer kan nemt sorteres som rigtige datoer, uden at skulle skille dem ad for først at sortere efter år, dernæst måned og tilsidst dagen. Den "numeriske" størrelse af datoen fremgår jo direkte af datoformatet: 2001-19-02 == 20011902.

Det du skal være opmærksom på, er når du arbejder videre med datoerne i php. Her skal du først konvertere tallet til unix_timestamp (antallet af sekunder siden 1970), men det er også let nok:
[code]SELECT name, address, UNIX_TIMESTAMP(birthday) as bday FROM addressbook;[/code]
Så kan du fortsætte i php og formatere det i lige netop det format du ønsker med "strftime".

PS. Hvis du vil søge og filtrere på din dato-kolonne, så sørg for at indeksere den.
Avatar billede masteraaen Novice
19. november 2010 - 13:17 #5
Tak mr. gumble. Lige i øjet.

PS: Hvordan indekserer jeg en kolonne?
Avatar billede webweaver Praktikant
19. november 2010 - 13:58 #6
Du behøver ikke konvertere til Unix Epoch først, for derefter at formatere datoen.
Det kan du gøre direkte i din SQL.

mysql_query("SELECT name, adress, DATE_FORMAT(birthday, '%d/%m - %Y, %H:%i:%s') as bday FROM adressbook WHERE mindato > ....
Avatar billede showsource Seniormester
20. november 2010 - 07:54 #7
mysql_query("set lc_time_names='da_DK'") or die (mysql_error());

$idag = mysql_query("SELECT DAYNAME(NOW())") or die (mysql_error());

echo mysql_result($idag,0);
Avatar billede The_Buzz Novice
26. november 2010 - 18:00 #8
Lige et eksempel på PHP og MySQL tid og script brug: http://www.phptips.dk/Datoer_i_PHP_og_MySQL.tip
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