bazzo Skrevet 20. februar 2006 Del Skrevet 20. februar 2006 Hvordan regner jeg ut en alder utifra fødselsdato i år, mnd og dag? eks. Du er 30 år, 3 mnd og 20 dager gammel. Fant noen tråder om noenlunde det samme her på forumet, men kun script som regner ut år. Lenke til kommentar
NH Skrevet 20. februar 2006 Del Skrevet 20. februar 2006 (endret) jeg har laget denne: <?php /** * @author Nicolai Haugen * @param int $year Fødselsår (f.eks 1986) * @param int $month Fødsels måned (f.eks 06 (juni)) * @param int $day Fødselsdag (f.eks 14) * @return int|array * @version 1.0 */ function alder($year, $month, $day){ $curr_year = date('Y'); $curr_month = date('n'); $curr_day = date('j'); if($day > $curr_day){ $num_days = $day - $curr_day; } else { $num_days = $curr_day; } if($month > $curr_month){ $num_months = $month + $curr_month; } else { $num_months = $curr_month; } $num_years = $curr_year - $year; if($month > $curr_month OR $day > $curr_day){ $num_years = $num_years - 1; } return array('years' => $num_years, 'months' => $num_months, 'days' => $num_days); } jeg kjørte den med min fødselsdato (14/6/1986) og fikk dette arrayet tilbake: Array ( [years] => 19 [months] => 8 [days] => 20 ) Endret 20. februar 2006 av NH Lenke til kommentar
bazzo Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 Hmm takker, men fikk den ikke helt til. Gjorde slik: $age = alder(2000, 02, 25); echo "Jeg er ". $age['years'] ." år, ". $age['months'] ." mnd. og ". $age['days'] ." dager gammel."; Men denne viser " Jeg er 5 år, 2 mnd. og 4 dager gammel. " og burde vise noe sån ca. " Jeg er 5 år, 11 mnd. og xx dager gammel. " Lenke til kommentar
NH Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 (endret) beklager dette. hadde en liten bug i scriptet som fucket om du allerede har hatt bursdag. en oppdatert utgave: <?php /** * @author Nicolai Haugen * @param int $year Fødselsår (f.eks 1986) * @param int $month Fødsels måned (f.eks 06 (juni)) * @param int $day Fødselsdag (f.eks 14) * @return int|array * @version 1.0 */ function alder($year, $month, $day){ $curr_year = date('Y'); $curr_month = date('n'); $curr_day = date('j'); if($day > $curr_day){ $num_days = $day - $curr_day; } else { $num_days = $curr_day; } if($month > $curr_month){ $num_months = $month + $curr_month; } else { $num_months = $curr_month; } $num_years = $curr_year - $year; if($month > $curr_month OR $day > $curr_day){ $num_years = $num_years - 1; } else { $num_days = $curr_day - $day; $num_months = $curr_month - $month; } return array('years' => $num_years, 'months' => $num_months, 'days' => $num_days); } ?> fungerer på samme måten... Endret 22. februar 2006 av NH Lenke til kommentar
kakkle Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 VEl... Den er vel ikke helt 100% enda... alder(1999, 3, 31) gir: Array ( [years] => 6 [months] => 5 [days] => 9 ) og det blir vel ikke helt riktig ? Det ble jo feil med din bursdag også i den forrige koden du postet ? Skulle vel vært noe ala Array ( [years] => 19 [months] => 8 [days] => 6 ) Så fremt du kjørte scriptet den 20/2/2006 Lenke til kommentar
NH Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 spørs helt hvordan du ser på det. jeg mener at i ogmed at vi var 20 dager inn i måneden blir det riktig. For hvor lenge er egentlig en måned? man kan eventuelt hente ut antall dager siden bursdagsmåneden min, trekke i fra hvor mange dager det var inn i juni og hvor mange dager det mangler i måneden vi er i, (da calendar funskjonen kun henter ut for hele måneder) men er noe tungvindt... Lenke til kommentar
bazzo Skrevet 22. februar 2006 Forfatter Del Skrevet 22. februar 2006 beklager dette. hadde en liten bug i scriptet som fucket om du allerede har hatt bursdag. en oppdatert utgave: 5647753[/snapback] Hmm, fikk akurat samme resultat her ivetfall... Lenke til kommentar
kakkle Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 (endret) Får det heller ikke til å stemme. Det stemmer dersom dagen og måneden man har bursdag er mindre enn dagen og måneden idag. F.eks en som er født 30. januar 2001, vil ikke få rett resultat (4 År, 2 måneder og 8 dager) Eks: En som er født 31. mars 1999 er idag (22.februar 2006) er etter det jeg mener 6 år, 10 måneder, 22 dager og ikke 6 år, 5 måneder, 9 dager som kommer av dette scriptet. Men sliter litt med å komme med en kode som fungerer selv, da Så jeg skal vel egentlig ikke si så veldig mye Endret 22. februar 2006 av kakkle Lenke til kommentar
kilogram Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 De gjer dette unødig komplisert; (denne koden har ikkje vorte testa) function alder($timestamp) { $age = time() - $timestamp; return Array( "years" => date("Y", $age) - 1970, // trekker fra 1970 (UNIX epoch) "months" => date("n", $age) - 1, // trekker fra januar (som er UNIX epoch) "days" => date("j", $age) - 1); // trekker fra den første (UNIX epoch) } Denne funksjonen tar korrekt med i betraktningen ting som skuddår, månedar som er kortare enn vanlig (februar), og så vidare. Det er ofte lurt å benytte seg av dei innebygde funksjonane i PHP når ein skal gjere dato-baserte ting. Lenke til kommentar
NH Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 ja, eneste ulempen er at den ikke fungerer med noen som er født før 1970 Lenke til kommentar
kilogram Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 ja, eneste ulempen er at den ikke fungerer med noen som er født før 1970 5650028[/snapback] Har du prøvd det? Den skal fungere; testa no, og det funker; print_r(alder(time() - (50 * 365 * 24 * 60 * 60))); OUTPUT; Array ( [years] => 49 [months] => 11 [days] => 19 ) Det er korrekt. Lenke til kommentar
kakkle Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 vel testet litt nedover, og kom fram til at det går greit ned til 1938 (68 år)... Når jeg prøvde 1937, fikk jeg -68 år... Er det mulig å omgå, kanskje ? Lenke til kommentar
bazzo Skrevet 22. februar 2006 Forfatter Del Skrevet 22. februar 2006 Nå falt jeg ut her "kilogram", hvor setter jeg fødselsdatoen ? Lenke til kommentar
kilogram Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 Nå falt jeg ut her "kilogram", hvor setter jeg fødselsdatoen ? 5650226[/snapback] Om du har datoen på formatet 22.02.1984 (dato.måned.år), kan du ganske enkelt sende den inn til strtotime(), og så sende den videre til alder(), dvs. slik som dette; $dato = '22.02.1984'; $resultat = alder(strtotime($dato)); print_r($resultat); Dette fordi strtotime() konverterer ein tekstlig dato til et såkalt timestamp, som er antallet sekunder siden det såkalte UNIX epoch (1. januar 1970 kl 00.00). Det er eit slikt timestamp funksjonen alder() er laga for å ta imot. Når det gjeld 1938-feilen, så bør dette vere mulig å gjere noko med. Men akkurat no er eg ikkje kreativ nok til å gjere noko med det... Om det er eit "fliparound point" på nøyaktig 68 år, bør det jo vere enkelt å reversere dette med ein if-setning. I leave it as an exercise to the reader... Lenke til kommentar
bazzo Skrevet 22. februar 2006 Forfatter Del Skrevet 22. februar 2006 Nå falt jeg ut her "kilogram", hvor setter jeg fødselsdatoen ? 5650226[/snapback] Om du har datoen på formatet 22.02.1984 (dato.måned.år), kan du ganske enkelt sende den inn til strtotime(), og så sende den videre til alder(), dvs. slik som dette; $dato = '22.02.1984'; $resultat = alder(strtotime($dato)); print_r($resultat); 5650299[/snapback] Da får jeg denne, og den kan vel ikke stemme ? Array ( [years] => 36 [months] => 1 [days] => 21 ) Lenke til kommentar
bazzo Skrevet 23. februar 2006 Forfatter Del Skrevet 23. februar 2006 Nå har jeg googlet i flere timer, finnet ingen script som regner ut rett alder. Er det mulig å få dette til med Javascript kanskje? Lenke til kommentar
kakkle Skrevet 23. februar 2006 Del Skrevet 23. februar 2006 (endret) Dersom det holder med datoer fra 1938 og senere, så kan du bruke funksjonen til Kilogram For å lage timestamp av en dato, kan du bruke følgende funksjon: int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ) f.eks for datoen 22.02.1984 (kl 00:00): mktime(0,0,0,2,22,1984); også sender du resultatet til funksjonen (alder(mktime(0,0,0,2,22,1984)). Det funker ihvertfall "mycke bra" hos meg. Eneste er at det ikke funker for datoer før 1938... Men som kilogram sier, så går nok sikkert det an å omgå på en måte... Endret 23. februar 2006 av kakkle Lenke til kommentar
bazzo Skrevet 23. februar 2006 Forfatter Del Skrevet 23. februar 2006 Der fikk jeg den til, TAKK! Lenke til kommentar
LateEntry Skrevet 1. juni 2006 Del Skrevet 1. juni 2006 Er det noen som bare kan "lime inn" hele php koden sammenhengende, slik at det blir seende ut omtrent sånn: <? php kode + en justerbar initial dato ?> Lenke til kommentar
LateEntry Skrevet 18. juni 2006 Del Skrevet 18. juni 2006 Okay! Jeg fikk det til <? function alder($timestamp) { $age = time() - $timestamp; return Array( "years" => date("Y", $age) - 1970, // trekker fra 1970 (UNIX epoch) "months" => date("n", $age) - 1, // trekker fra januar (som er UNIX epoch) "days" => date("j", $age) - 1); // trekker fra den første (UNIX epoch) } $date_timestamp = mktime(0,0,0,11,20,2005); $resultat = alder($date_timestamp); $years = $resultat["years"]; $months = $resultat["months"]; $days = $resultat["days"]; echo "Nicholas er "; if( $years > 0 ) echo $years." år, "; echo $months." måneder og "; echo $days." dager!"; ?> (Passer utmerket på forsiden til vår babys hjemmeside) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå