Avatar billede Slettet bruger
16. februar 2009 - 11:18 Der er 10 kommentarer og
1 løsning

Arbejde med datoer

Hej,

Jeg er kommet til emnet "datoer" i mit kig på php.

Hvis jeg har (i min mysql-database) en række events der kunne se ud som flg. ("id", "titel", "dato" i database):

Id: 1 - Fødselsdag (2009-02-16)
Id: 2 - Bryllup (2009-02-18)
Id: 3 - Konfirmation (2009-02-20)
Id: 4 - Fisketur (2009-01-15)

Jeg har i databasen sat rækken "dato" som "DATE and TIME > DATE".


Ok, jeg er klar over, at jeg kan sortere efter dato ud fra:
$query = mysql_query("SELECT * FROM events ORDER BY dato asc");

Id: 4 - Fisketur (2009-01-15)
Id: 1 - Fødselsdag (2009-02-16)
Id: 2 - Bryllup (2009-02-18)
Id: 3 - Konfirmation (2009-02-20)


- men hvad med selv dato-formatet - det er jo ikke sådan, vi normalt angiver datoer i Danmark?

2009-01-15 = 15. januar 2009
- det skal jo helst vendes om: 15-01-2009

Men hvor gør man det?
- Formaterer man typisk datoen inden den ryger i databasen?
- Sætter man format op _i_ databasen
eller...
- Formaterer man typisk når man trækker datoen ud af databasen igen?

Håber der er nogen, der kan "oplyse" mig :-)
Avatar billede Slettet bruger
16. februar 2009 - 11:30 #1
Nå, du godeste - det var (også) simpelt i php:
http://www.phpartikler.dk/artikler/mysqldato.php

Skynder mig at lukke igen!
Avatar billede majbom Novice
16. februar 2009 - 11:30 #2
strftime("%e-%m-%Y", strtotime(2009-02-19));

udskriver: 19-02-2009

så ja, man formatterer datoen efter beov efter udtrækket. den er nemmere at have med at gøre i databasen, når den er lagret som DATE
Avatar billede majbom Novice
16. februar 2009 - 11:31 #3
der var jeg sq for langsom :)
Avatar billede Slettet bruger
16. februar 2009 - 11:54 #4
Damn, undskyld splazz, det er ikke første gang :-s

Der skal vist stå "d" i stedet for "e" i din streng, men I get it.

Men smider man så bare i databasen i formatet: 2009-01-15

Hvis man nu vil ha' en bruger til at indtaste en dato, vil vedkommende jo nok ikke gør det sådan, men i stedet skrive 15-01-2009.

Dvs. man skal også formattere INDEN datoen ryger i databasen, så den kommer i databasen som "2009-01-15"?
Avatar billede majbom Novice
16. februar 2009 - 12:53 #5
så kan du f.eks. gøre sådan her:

$date_arr = explode("-","15-02-2009");
$db_date = date("Y-m-d", mktime(0, 0, 0, $date_arr[1], $date_arr[0], $date_arr[2]));

du kan også bruge en date-picker til dine datofelter, så du altid får datoen i det rigtige format.
Avatar billede Slettet bruger
16. februar 2009 - 12:58 #6
Tak for svar!

Sjovt nok så prøver jeg lige nu, bemærk at den sorterer efter dage - og tager ikke hensyn til årstal ("17. december" kommer midt i, selvom den burde være nr. 2 i listen):

$query = mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m%-%Y') AS dato FROM events ORDER BY dato asc");

Id: 5 - December event (01-12-2008)
Id: 4 - Fisketur (15-01-2009)
Id: 1 - Fødselsdag (16-02-2009)
Id: 6 - 17. december (17-12-2008)
Id: 2 - Bryllup (18-02-2009)
Id: 3 - Konfirmation (20-02-2009)


Hvordan kan det være?
Avatar billede Slettet bruger
16. februar 2009 - 13:16 #7
Hmm - kan se at det virker med:

$query = mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m%-%Y') AS dato, dato as sortdate FROM events ORDER BY sortdate asc");


Men fatter dog ikke helt pointen/hvorfor...
Avatar billede majbom Novice
16. februar 2009 - 13:55 #8
prøv med: $query = mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m%-%Y') AS min_dato FROM events ORDER BY dato asc");
Avatar billede Slettet bruger
16. februar 2009 - 14:03 #9
Well, min #7 virker fint - jeg fattede bare ikke hvorfor det var nødvendigt med "dato as sortdate" også... men hvad :-)
Avatar billede majbom Novice
16. februar 2009 - 15:27 #10
det er fordi den sorterer efter dato i det format du har valgt i din query, fordi du skriver AS dato, er det det den sorterer efter og ikke feltet dato.
Avatar billede majbom Novice
18. februar 2009 - 14:44 #11
fik du det til at virke?

og nej der skal stå %e og ikke %d

e skriver uden foranstillet 0 (1-31)
d skriver med foranstillet 0 (01-31)
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