tnViking Skrevet 13. januar 2012 Del Skrevet 13. januar 2012 Heisann! Hvordan får jeg regnet ut alderen på en person når jeg har året h*n er født, samt datoen og månden. Akkurat når så bruker jeg dette : $alder = date(Y)-$req_user_info['Year']; Men då får jeg ikke opp den korrekte alderen, f.eks jeg, født november 1996, står det at jeg er 16 år, når jeg nesten nettopp har fylt 15. Håper noen skjønner mitt problem Lenke til kommentar
Martin HaTh Skrevet 13. januar 2012 Del Skrevet 13. januar 2012 Du blir 16 i løpet av 2012, dermed, når du bare regner med år, vil programmet si at du er 16 i 2012. Lenke til kommentar
tnViking Skrevet 13. januar 2012 Forfatter Del Skrevet 13. januar 2012 Det er jeg klar over, men jeg ønsker at den 28. november skal den gå over til 16 år Lenke til kommentar
Martin HaTh Skrevet 13. januar 2012 Del Skrevet 13. januar 2012 Vel, da blir du i alle fall nødt til å sette input til ikke bare året du er født, men fullstendig dato. Lenke til kommentar
tnViking Skrevet 13. januar 2012 Forfatter Del Skrevet 13. januar 2012 (endret) Løsningen: list($year,$month,$day) = explode("-",$birthday); $year_diff = date("Y") - $row['Year']; $month_diff = date("F") - $row['Birthday_Month']; $day_diff = date("d") - $row['Birthday_Day']; if ($day_diff < 0 || $month_diff < 0) $year_diff--; return $year_diff; Endret 13. januar 2012 av Goldfiner Lenke til kommentar
srbz Skrevet 13. januar 2012 Del Skrevet 13. januar 2012 (endret) Er du sikker på at koden løser problemet? Argumentet i if-statement sier at dersom day_diff er mindre enn 0 eller month_diff er mindre enn 0, skal variabelen year_diff dekrementeres. Det innebærer at dersom jeg er født 20. mai mens dags dato er 8. oktober, skal year_diff dekrementeres, ettersom 8 er mindre enn 20. list($year,$month,$day) = explode("-",$birthday); $year_diff = date("Y") - $row['Year']; $month_diff = date("F") - $row['Birthday_Month']; $day_diff = date("d") - $row['Birthday_Day']; if ($month_diff < 0 || $month_diff == 0 && $day_diff < 0) $year_diff--; return $year_diff; Jeg tror dette blir riktig (men jeg er ikke særlig dreven i PHP). Først håndterer du situasjonen dersom inneværende måned er mindre enn fødelsdagsmåneden. Eventuelt sjekker du om dagens dato er mindre enn fødselsdato gitt at inneværende måned er samme som fødselsdagsmåneden. Korriger meg gjerne om jeg tar feil. edit: Ser ut som jeg har rett. TS har tydeligvis lånt koden sin herfra, uten å sjekke første kommentarpost som strengt tatt sier det samme som meg Altså: dersom jeg er født 20. mai 1992 så vil jeg være 20 år gammel den 8. oktober 2012. Koden TS har postet vil imidlertid returnere 19 år, fordi day_diff vil være mindre enn 0 når man sammenligner 20. mai og 8. oktober (ettersom 8 < 20). Du må også ta høyde for at det kan være forskjellig måned før du betrakter day_diff. Imidlertid vil jeg tro det ville vært prinsipielt enklere å operere med tidsstempel på millisekundformat, funnet diff i antall millisekunder mellom bursdag og dags dato, for så å gjøre en heltallsdivisjon med diff delt på antall millisekunder i et år. Eller noe sånt. Jeg tror uansett PHP har greit med innebygget støtte for dette? Endret 13. januar 2012 av srbz 1 Lenke til kommentar
Crowly Skrevet 16. januar 2012 Del Skrevet 16. januar 2012 (endret) Imidlertid vil jeg tro det ville vært prinsipielt enklere å operere med tidsstempel på millisekundformat, funnet diff i antall millisekunder mellom bursdag og dags dato, for så å gjøre en heltallsdivisjon med diff delt på antall millisekunder i et år. Eller noe sånt. Jeg tror uansett PHP har greit med innebygget støtte for dette? strtotime() er greit å se på da, eller http://no2.php.net/manual/en/datetime.diff.php Eksempel 1, Procedural style, bitt litt modifisert: $datetime1 = date_create('22.02.1976'); $datetime2 = date_create('now'); $interval = date_diff($datetime1, $datetime2); echo $interval->format('%y år %m mnd %d dager'); Som skriver ut 35 år 10 mnd 23 dager (i skrivende stund). Se på http://no2.php.net/manual/en/dateinterval.format.php for hvordan du formaterer output. Endret 16. januar 2012 av Crowly 1 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å