[Php Mysql] Date en between probleem

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo allen :)

Ik zit met een simpel en waarschijnlijk stom probleem. (eigenlijk 2)

Voor de website van een vereniging ben ik aan de gang om een verjaardags kalender ala " hyves" te maken.
De geboortedatums staan in mysql date cellen met de opmaak yyyy-mm-dd.

Nu wil ik laten zien wie er vandaag en de aankomende dagen jarig zijn.
Ik haal met de date functie van Php de datum van vandaag, van gister en die van 7 dagen geleden op zie:
code:
1
2
3
$datum_vandaag = date("Y-m-d"); 
$datum_morgen = date("Y-m-d", strtotime("+1 days"));
$datum_volgendeweek = date("Y-m-d", strtotime("+7 days"));


Vervolgens wil ik de jarigen van vandaag uit de database halen:
code:
1
$select = "SELECT * FROM verjaardagen WHERE `datum` ='$datum_vandaag' ";

en die van morgen-week verder:
code:
1
2
  $select = "SELECT * FROM verjaardagen WHERE `datum` BETWEEN  '$datum_morgen'  
AND '$datum_volgendeweek' ";


Het probleem is dat hij (logisch) ook het geboortejaar gebruikt waardoor iedereen alleen jarig is op zn geboortedatum.

Het 2e probleem is dat hij de BETWEEN van het 2e stukje niet wil pakken. Hierbij geeft hij hoe gek ik de datums ook maak, helemaal niets weer.

Mijn vraag is dan hoe ik de jaartallen niet kan laten meerekenen (excluden?) en vanwaar de between compleet niets weergeeft?

Ik verwacht geen kantenklare antwoorden maar ik weet niet meer of ik wel de goede denkwijze gebruik om het voor elkaar te krijgen.

Google, Php.net ik heb vanalles geprobeerd.

Ik hoop dat iemand me de goede weg in kan schoppen! _/-\o_

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Zie de datumtijd-functies van MySQL en kijk dan vooral eens naar het dagnummer van de geboortedatum. Wanneer iemand op dag 100 van jaartal X is geboren, dan is voor jouw vergelijking alleen dag 100 interessant. En wanneer het vandaag dag 95 is, dan wil je dus dag 94 t/m dag 102 opvragen. Volgens mij is het iets van DOY, DayOfYear, dag_van_het_jaar.

Verwijderd

http://dev.mysql.com/doc/...en/date-calculations.html

Edit: met "birthday mysql" en het eerste resultaat kom je op de bovenstaande pagina!

[ Voor 41% gewijzigd door Verwijderd op 10-09-2009 20:21 ]


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 16:32

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Deze heb je nodig: DAYOFYEAR()
SQL:
1
2
3
4
5
6
SELECT 
  * 
FROM 
  tabelnaam 
WHERE 
  DAYOFYEAR(geboortedatum) BETWEEN DAYOFYEAR(CURRENT_DATE - INTERVAL 1 DAY) AND DAYOFYEAR(CURRENT_DATE + INTERVAL 7 DAY);

Verwijderd

Topicstarter
Wat een snelheid !

DAYOFTHEYEAR lijkt inderdaad een oplossing. Ik was nog niet op de hoogte van de tijdfuncties van Mysql.

Ik heb dan ook vooral op php+birthday (=spamrotzooi), php+date en php+verjaardagskalender gezocht.

Bedankt voor de reacties _/-\o_ , ik heb weer wat leesvoer :Y)

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Probeer dat eens uit in een schrikkeljaar.... :) Oplossing: zie Enfer.
SQL:
1
2
3
SELECT * FROM `users` 
    WHERE MONTH(`birthdate`)=MONTH(NOW()) AND     
        DAYOFMONTH(`birthdate`)=DAYOFMONTH(NOW());
En dan nog even nadenken hoe je mensen die op 29 feb geboren zijn wil behandelen.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Probeer dat eens uit in een schrikkeljaar....
Dat is binnen de marge ;)

Al kun je met een CASE natuurlijk een andere berekening doen wanneer er sprake is van schrikkeljaren. Maar, schrikkeljaren spelen aan twee kanten, zowel de geboortedatum als de huidige datum kunnen in een schrikkeljaar vallen.
Pagina: 1