Avatar billede andersdp Nybegynder
08. september 2004 - 11:32 Der er 16 kommentarer og
1 løsning

Udregn alder udfra date field

Kan man på en nem måde udregne en persons alder udfra et datefield(YYYY-MM-DD) i db'en?

Der skal selvfølgelig tages højde for skudår, dags dato og den slags...
Avatar billede locturian Nybegynder
08. september 2004 - 11:46 #1
Det kommer helt an på hvilket programmeringssprog du bruger, mysql har ikke selv en "age" funktion i sig....
Avatar billede andersdp Nybegynder
08. september 2004 - 11:52 #2
Øv, troede måske der var det...

Men ellers er det php jeg bruger.
Avatar billede locturian Nybegynder
08. september 2004 - 11:54 #3
Æv, er ikke lige den store haj til php, men i asp kan man bruge funktionen "datediff", er sikker på at der er noget tilsvarende i php :)
Avatar billede andersdp Nybegynder
08. september 2004 - 11:56 #4
Hmm, har nemlig forsøgt at lede lidt efter en php funktion der kunne klare opgaven.
Selvfølgelig kunne man skrive lortet selv, meeeeen hvis der nu var en nemmere løsning :)
Avatar billede thomashove Nybegynder
08. september 2004 - 12:28 #5
måske dette kunne bruges

SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age from personer where (id=1000)

du skal selvfølgelig tilpasse de enkelte variable til din tabel
Avatar billede thomashove Nybegynder
08. september 2004 - 12:29 #6
Avatar billede andersdp Nybegynder
08. september 2004 - 12:35 #7
Ja, sidder netop og kigger på samme link.

Jeg prøvede lige din kode thomashove, men det eneste jeg får ud af det er "name" - jeg får ikke regnet alderen regnet ud....

$age = mysql_result(mysql_query("SELECT membername, (TO_DAYS(NOW())-TO_DAYS(memberbirthday))/365 AS age FROM members WHERE memberid = '$_SESSION[memberid]'"), 0);
echo $age;
Avatar billede thomashove Nybegynder
08. september 2004 - 12:56 #8
koden er fin nok. du vælger bare kun at udskrive navnet. Prøv at gøre sådan her istedet:

$mysql_rs = mysql_query("SELECT membername, (TO_DAYS(NOW())-TO_DAYS(memberbirthday))/365 AS age FROM members WHERE memberid = '$_SESSION[memberid]'");

$array=mysql_fetch_assoc($mysql_rs);

print_r($array);
Avatar billede andersdp Nybegynder
08. september 2004 - 12:56 #9
Hmm, testede lige denne her i min MySQL editor.
Den virker som den skal.
---------------------------------
SELECT membername, memberbirthday, CURDATE(), (YEAR(CURDATE())-YEAR(memberbirthday)) - (RIGHT(CURDATE(),5)<RIGHT(memberbirthday,5)) AS age FROM members;
---------------------------------

Men hvordan får jeg skrevet "age" ud med php?

Troede egentlig dette kunne gøre det, men det giver bare fødselsdatoen:
---------------------------------
<?php $alder = mysql_result(mysql_query("SELECT memberbirthday, CURDATE(), (YEAR(CURDATE())-YEAR(memberbirthday)) - (RIGHT(CURDATE(),5)<RIGHT(memberbirthday,5)) AS age FROM members WHERE memberid = '$_SESSION[memberid]'"), 0); echo $alder;?>
---------------------------------
Avatar billede thomashove Nybegynder
08. september 2004 - 12:58 #10
mysql_fetch_assoc() er bare valgt som eksempel .. der findes utallige måder at behandle sit result set på....
Avatar billede thomashove Nybegynder
08. september 2004 - 13:00 #11
i stedet for print_r() kan du også skrive:

echo($array['membername']);
echo($array['age']);
Avatar billede andersdp Nybegynder
08. september 2004 - 13:03 #12
Det fungerer, sådan da :)

Med "echo($array['age']);", får jeg udskrevet 28.09 hvor 28 er den korrekte alder - men .09 forstår jeg ikke?
Avatar billede thomashove Nybegynder
08. september 2004 - 13:06 #13
hvis du har brugt mit eksempel dividere du jo med 365 og dermed får du et kommatal - her kan du dog blot sige:

echo(round($array['age']));
Avatar billede andersdp Nybegynder
08. september 2004 - 13:10 #14
Ja, ok.

Meeen, der tages ikke højde for fødselsdatoen.
Hvis jeg f.eks. leger lidt med at ændre min fødselsdato fra igår til imorgen får jeg stadig samme alder...
Avatar billede andersdp Nybegynder
08. september 2004 - 13:23 #15
Så var den der :)

Bruger følgende kode (php):
------------------------------------------
<?php
$mysql_rs = mysql_query("SELECT memberbirthday, CURDATE(), (YEAR(CURDATE())-YEAR(memberbirthday)) - (RIGHT(CURDATE(),5)<RIGHT(memberbirthday,5)) AS age FROM members WHERE memberid = '$_SESSION[memberid]'");

$array=mysql_fetch_assoc($mysql_rs); echo($array['age']);
?>

Koden er baseret på et felt kaldet "memberbirthday" med date(YYYY-MM-DD) som datatype.

Har testet koden med forskellige datoer, og har ikke fundet fejl...

Du hjalp mig på rette vej thomashove, så du får pointene for din tid:)
Avatar billede thomashove Nybegynder
08. september 2004 - 13:25 #16
hmm - det har du ret i ... har lige testet med eksemplet fra MySQL siden og den virker tilsyneladende fint nok.

$mysql_rs = mysql_query("SELECT membername, (YEAR(CURDATE())-YEAR(memberbirthday)) - (RIGHT(CURDATE(),5)<RIGHT(memberbirthday,5)) AS age FROM members WHERE internalid memberid = '$_SESSION[memberid]'");
$array=mysql_fetch_assoc($mysql_rs);
echo($array['name']);
echo($array['age']);
Avatar billede thomashove Nybegynder
08. september 2004 - 13:26 #17
he he - ser ud til at vi fandt frem til det samme ;-)

takker for points ;-)
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
Computerworld tilbyder specialiserede kurser i database-management

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