Bij het registreren op mijn website dienen gebruikers hun geboortedatum in te vullen. Deze wordt vervolgend in de database opgeslagen als "2005-01-01" in een veld van het type DATE.

Als ik deze datum later ophaal met de query:
SELECT UNIX_TIMESTAMP(birthday) AS birthday FROM members
en deze vervolgens weergeef met:

echo date("d-m-Y", $row['birthday']);

Dan staat er 31-12-2004.

Hoe komt dit?
Wat doe ik fout?
Hoe kan ik dit beter doen?

Alvast hartelijk bedankt voor de hulp.
RTFM: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
-> D A T E _ F O R M A T ( )

op al je vragen: omdat je niet verder nadenkt dan dat je neus lang is!!

Indien iets uit een database komt, dan kan je het ook met SQL oplossen, dan hoef je dus ook niet zo te fd-en met php functies.

En je moet geen aliasssen zetten die gelijk zijn aan de veldnamen die je gebruikt in je SQL!
er is geen enkele belemmering om een alias te gebruiken die gelijk is aan de veldnaam. Het wordt zelfs heel vaak gebruikt met name bij functies zoals SELECT AVG(bedrag) as bedrag of SELECT sum(bytes) as bytes. Het werkt gewoon, je resultaat wordt er niet minder om.
Aad, schrijf nu geen onzin, het kan wel degelijk zijn dat een alias het gesorteerde resultaat doet verneuken. En dus geef je je alias nooit eenzelfde naam als een veld wat in de query gebruikt wordt!
Noppes Homeland op 15/10/2010 22:06:21

Aad, schrijf nu geen onzin, het kan wel degelijk zijn dat een alias het gesorteerde resultaat doet verneuken. En dus geef je je alias nooit eenzelfde naam als een veld wat in de query gebruikt wordt!

@Noppes: nog nooit problemen mee gehad. Ik programmeer al meer dan 10 jaar SQL en PL/SQL weliswaar meer in Oracle dan in MySQL maar toch nog nooit problemen mee gehad.
Bedankt voor de tip over de alias.

Ik had al in de functielijst gekeken, maar deze functie over het hoofd gezien.

Ik moet wat duidelijker zijn, nu kan ik nog steeds niet wat ik precies wil. Ik wil de datum uit de database halen, en vervolgens de dag, maand en het jaar apart hieruit halen. Is het dan al het makkelijkst als ik deze alle 3 apart ophaal, of kan het ook eenvoudig met php, behalve met explode, met de date functie ofzo?
Het meest eenvoudige is om dit in je SQL statement te doen. Kijk naar MySQL date functions.
SELECT DATE_FORMAT(birthday,'%d') as dag,
SELECT DATE_FORMAT(birthday,'%m') as maand,
SELECT DATE_FORMAT(birthday,'%y') as jaar
from jouw tabel

Ok, bedankt, dat had ik ook al in gedachten. Maar misschien is er een makkelijkere manier om dit te doen.

Normaal als ik het DATETIME type gebruik, dan haal ik het op als UNIX_TIMESTAMP(date)

en dan doe ik

date("y", $row['date'])

Kan handig zijn als je dezelfde datum op verschillende manieren wilt weergeven.
Overigens was mijn voorbeeld iets teveel cut and past....
het moet zo:

SELECT 
      DATE_FORMAT(birthday,'%d') as dag,
      DATE_FORMAT(birthday,'%m') as maand,
      DATE_FORMAT(birthday,'%y') as jaar
from 
      MEMBERS


En dit is zonder meer de snelste en makkelijkste manier en vergeet dat UNIX_TIMESTAMP gedoe.

dat had ik al begrepen. bedankt!
Als je dag maand jaar uit een datum wilt halen dan doe je dat al niet bij voorbaat met DATE_FORMAT maar gebruik je DAY/MONTH/YEAR of je gebbruikt EXTRACT

DATE_FORMAT is er alleen voor om je datum/tijd te presenteren, voor de rest kan je er niets meer mee.

Reageren