[PHP] Leeftijd (yday) wijkt 1 dag af

Pagina: 1
Acties:
  • 233 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:48
Ik heb een userdatabase waarin oa. de geboortedatum van users wordt opgeslagen. Op de PHP pagina moet dan aan de hand daarvan de leeftijd worden uitgerekend.

De geboortedatum staat in een DATE field in MySQL.

Ik heb hiervoor het volgende geschreven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$q_currow = mysql_fetch_array($q_result);

$curdate = getdate();
$curyear = $curdate['year'];
$curyday = $curdate['yday'];

// nu maak ik van $birthday een timestamp zodat getdate() ermee kan werken
$birthday = strtotime($q_currow['birthday']);
$birday  = getdate($birthday);
$biryear = $birday['year'];
$biryday = $birday['yday'];

$curage = $curyear - $biryear;

if ($curyday < $biryday) {
   $curage = $curage - 1;
   // Dit jaar nog niet jarig geweest, dus leeftijd - 1
   echo "Nog niet jarig";

} elseif ($curyday == $biryday) {
   echo "Vandaag jarig.";
   //Vandaag jarig, $curage klopt al... dit deel is op zich niet nodig
   //om de leeftijd te geven maar staat erbij omdat ik ook iets
   //speciaals wil doen als een user jarig is.

} else {
   echo "Jarig geweest";
   //User is dit jaar al jarig geweest, $curage klopt al.
}
echo "LEEFTIJD: " . $curage;


Ik heb de MySQL server op mijn eigen pc draaien, dus ik kan dit script makkelijk uittesten door de datum van mijn pc verzetten. In de database heb ik 1 record gezet, met voor het gemak maar even mijn eigen geboortedatum: 12 september 1984. In het datefield staat dat dus opgeslagen als 1984-09-12.

Dit alles werkt helemaal goed, op één ding na. De yday die ik uit de database haal is telkens één te hoog. :? Het script beweert daardoor dat ik op 13 september jarig ben. Op 12 september is het nog gewoon "niet jarig geweest". Waardoor komt dat??

Ik vermoed zelf dat het iets te maken heeft met het feit dat we alweer halverwege 12 september zitten, maar hoe dat precies in elkaar zit snap ik niet.

Disclaimer:
Ik ben gisteren pas begonnen met PHP/MySQL, en heb verder alleen maar ervaring met BASIC, dus het kan zijn dat ik een paar dingen omslachtig doe. Daar mag je me dan gerust op wijzen. ;)


Edit: CODE tags vervangen door PHP tags. Wist niet dat dat kon. :)

[ Voor 6% gewijzigd door Maniakje op 23-10-2003 13:38 ]

The sentence below is true.
The sentence above is false.


Acties:
  • 0 Henk 'm!

  • monkel
  • Registratie: Januari 2001
  • Laatst online: 12-09 22:28
waarom selecteer je niet gewoon op datum wanneer iemand jarig is, en reken je alleen aan de hand van het jaartal de leeftijd uit?

Acties:
  • 0 Henk 'm!

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:48
monkel schreef op 23 oktober 2003 @ 12:40:
waarom selecteer je niet gewoon op datum wanneer iemand jarig is, en reken je alleen aan de hand van het jaartal de leeftijd uit?
Je bedoelt dat ik de twee jaartallen van elkaar aftrek om de leeftijd te krijgen, en daarnaast nog een query doe om uit te zoeken of er vandaag mensen jarig zijn?

Op die manier kan de leeftijd een jaar afwijken. Daar is wel voor te compenseren maar dan krijg je toch weer een constructie die lijkt op wat ik net gepost heb? Of snap ik je reply nou niet goed? :)


Het gaat overigens hoofdzakelijk om de leeftijd. Dat het script ook nog aangeeft wie er vandaag jarig is, is meer een gimmick. Maar een kleine moeite om dat erbij in te bouwen.

Mijn probleem is natuurlijk gedeeltelijk op te lossen door $biryday = $biryday - 1, al gaat het script dan raar doen wanneer iemand op 1 januari jarig is. Het gaat mij hier vooral om de oorzaak. Waardoor is die yday 1 te hoog? Ikke niet snap. :P

[ Voor 16% gewijzigd door Maniakje op 23-10-2003 12:54 ]

The sentence below is true.
The sentence above is false.


Acties:
  • 0 Henk 'm!

  • monkel
  • Registratie: Januari 2001
  • Laatst online: 12-09 22:28
de query die ik gebruik:
code:
1
SELECT naam,datum,mv FROM db WHERE datum LIKE '%$vandaag'

als er niemand jarig is poept ie niks uit, als er wel iemand jarig is, kan je iets neerzetten van:

vandaag is $naam jarig, leeftijd: 2003-geboortejaar

op www.phpfreakz.nl staan trouwens nog een paar van dit soort scriptjes

[ Voor 21% gewijzigd door monkel op 23-10-2003 14:08 ]


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Heb je wel rekening gehouden met schrikkeljaren?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 12-09 17:48
Ik heb het nu voor elkaar met dit script van PHPFreakz. Dat is vrij makkelijk aan te passen zodat het in mijn pagina kan. :) Verjaardagen ga ik inderdaad met een query doen.

Thx voor de hulp. :)

The sentence below is true.
The sentence above is false.

Pagina: 1