Avatar billede internet Nybegynder
17. april 2007 - 18:24 Der er 13 kommentarer og
1 løsning

Beregne ud fra dato

Hej Eksperter..

Jeg har brug for hjælp til et script der kan beregne ens alder ud fra en fødselsdagsfelt i en MySQL database.

Fødselsdagsfeltet står i dette format:
2007-04-02 17:45:51

Håber I kan hjælpe.
Avatar billede showsource Seniormester
17. april 2007 - 19:15 #1
SELECT
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(), 5)<RIGHT(birth, 5)) as `alder`
FROM tabel

birth er datofeltet
Avatar billede internet Nybegynder
17. april 2007 - 19:33 #2
Jeg kan ikke få den til at virke, min kode ser sådan ud:

        <?php
$conn = mysql_connect("$server", "$user", "$password");
mysql_select_db("$database");
// Hent først data ud
$resultat = mysql_query("(YEAR(CURDATE())-YEAR(date))-(RIGHT(CURDATE(), 5)<RIGHT(date, 5)) as `alder` from news;");
while ($row = mysql_fetch_assoc($resultat)) {
extract($row);
?>

<?php echo $alder ?>
               
<?php }?>

Hvad er der galt?
Avatar billede showsource Seniormester
17. april 2007 - 19:59 #3
$resultat = mysql_query("SELECT (YEAR(CURDATE())-YEAR(date))-(RIGHT(CURDATE(), 5)<RIGHT(date, 5)) as `alder` from news;") or die (mysql_error());
Avatar billede internet Nybegynder
17. april 2007 - 21:13 #4
Tak for hjælpen..

Det virkede.. Hvis du poster et svar, så er pointne dine..

Gider du evt. forklare hvad de forskellige dele i din kode betyder?
Avatar billede internet Nybegynder
17. april 2007 - 21:23 #5
Det er denne del jeg ikke forstår:
(RIGHT(CURDATE(), 5)<RIGHT(date, 5))

Håber du gider forklare.
Avatar billede showsource Seniormester
18. april 2007 - 08:37 #6
Er hentet fra manualen,
http://dev.mysql.com/doc/refman/4.1/en/date-calculations.html

"The part of the expression that compares the MM-DD values evaluates to 1 or 0, which adjusts the year difference down a year if CURDATE() occurs earlier in the year than birth. The full expression is somewhat ungainly, so an alias  (age) is used to make the output column label more meaningful."

Altså, skal der trækkes 1 fra alderen?

RIGHT(CURDATE(), 5) for i dag er 04-18
RIGHT(date, 5) er så måske 05-18
Avatar billede internet Nybegynder
18. april 2007 - 14:34 #7
OK. Tak..

Hvis du poster et svar, så er pointne dine.
Avatar billede showsource Seniormester
19. april 2007 - 07:06 #8
njahh, ok.
Avatar billede internet Nybegynder
26. maj 2007 - 00:45 #9
Jeg starter lige denne tråd op igen..

Koden virker fint, den kan bare ikke finde ud af at beregne datoen, når den også skal se på måned og dato.

Det virker som om at koden kun tager den nuværende år - årets i "date"

Koden ser sådan ud:
<?php
require("config.php");
?>

<?php
$conn = mysql_connect("$server", "$user", "$password");
mysql_select_db("$database");
// Hent først data ud
$resultat = mysql_query("SELECT navn, DATE_FORMAT(date, '%d-%m%-%Y') AS 'tid', (YEAR(CURDATE())-YEAR(date)) - (RIGHT(CURDATE(),5)<RIGHT(date,5)) AS alder from birthdays;") or die (mysql_error());
while ($row = mysql_fetch_assoc($resultat)) {
extract($row);
?>
<?php echo $navn?> (<?php echo $alder?> years old)
<?php echo $tid?><br>

             
<?php }?>

Kan I hjælpe?
Avatar billede showsource Seniormester
29. maj 2007 - 06:11 #10
Jeg forstår ikke lige hvad du mener?
Men
birthdays;
skal vel være
birthdays
Avatar billede internet Nybegynder
30. maj 2007 - 15:06 #11
Fx hvis jeg har en person der har fødselsdag den 31 maj 2007 så fylder han i morgen 18 år.

Men scriptet viser at han allerede er fyldt 18 år, hvilket er en fejl.
Avatar billede internet Nybegynder
30. maj 2007 - 16:09 #12
Jeg mente selvfølgelig 1989 og ikke 2007.
Avatar billede showsource Seniormester
31. maj 2007 - 12:05 #13
hmm, flg. virker fint hos mig, og de to navne/datoer jeg har i tabellen er
ego 2000-06-01
egon 2000-05-31

og siger henholdsvis 6 og 7 år, i dag altså! :O)
( Og mit datofelt hedder dato og ikke date )

Og du bruger ' og ikke ` omkring tid?

$resultat = mysql_query("SELECT `navn`, DATE_FORMAT(`dato`, '%d-%m%-%Y') AS `tid`, (YEAR(CURDATE())-YEAR(`dato`)) - (RIGHT(CURDATE(),5)<RIGHT(`dato`,5)) AS `alder` FROM `birthdays`") or die (mysql_error());

while($row = mysql_fetch_assoc($resultat)) {
extract($row);

echo $navn ." - ". $tid ." - ". $alder ."<br />";

}
mysql_free_result($resultat);
Avatar billede internet Nybegynder
31. maj 2007 - 23:14 #14
tak.. jeg tror at fejlen var at jeg havde feltet "date" som typen datetime og ikke date.

Den virker nu..
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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