zyph Skrevet 20. mars 2008 Del Skrevet 20. mars 2008 Jeg har nå prøvd i utallige timer å lage en PHP-funksjon som regner ut alder på x i formatet "1 år og 4 måneder", hvis x er yngre enn 2 år (ja, det er snakk om dyr). Dessverre har det vist seg at jeg har begrensede matematikkunnskaper, så derfor må jeg faktisk krype til korset, og spørre etter hjelp. Er det noen kloke hoder der ute som kan hjelpe meg litt på vei? Takk! Lenke til kommentar
Haraldson Skrevet 20. mars 2008 Del Skrevet 20. mars 2008 Skjønner ikke helt hvor du vil hen med denne. Hvis dyret er under to år (jordsirkulasjoner rundt sola, ikke noen oppkonstruerte dyreår?) så skal hva regnes om? Hvordan ser det eksisterende tallmaterialet ditt ut, som du vil skrive ut i et annet format? Lenke til kommentar
Rasks Skrevet 20. mars 2008 Del Skrevet 20. mars 2008 Noe sånt? Så fikser du vel resten selv. <?php function birthday ($birthday) { //DD-MM-YY list($day, $month, $year) = explode("-", $birthday); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if (($month_diff<=0) && ($day_diff < 0)) { $year_diff--; $month_diff = $month_diff + 11; } elseif ($month_diff < 0) { $year_diff--; $month_diff = $month_diff + 12; } elseif ($day_diff <0) { $month_diff--; } if($year_diff < 2) return ($month_diff + 12*$year_diff)." måneder"; else return $year_diff." år og ".$month_diff." måneder"; } echo birthday("19-04-2006"); ?> Lenke til kommentar
zyph Skrevet 20. mars 2008 Forfatter Del Skrevet 20. mars 2008 Fantastisk - takk skal du ha! Lenke til kommentar
Kimble Skrevet 20. mars 2008 Del Skrevet 20. mars 2008 Er ganske vanlig å bruke modulusoperatoren til å regne ut sånt.. Ser du bort fra alle kommentarene så er det ikke mange kodelinjene som skal til.. <?php /** * @param $bd, streng på format strtotime funksjonen kan parse */ function birthday($bd) { // String -> timestamp for lettere regning $bdTimestamp = strtotime($bd); if (!$bdTimestamp) return false; $now = time(); // Henter ut tidspunktet nå // Beregner antall hele år, timestampen er sekunder // så vi deler på antall sekunder i et helt år (ser bort fra tull som skuddår..) $fullYears = ($now - $bdTimestamp) / (86400 * 365); // Runder av nedover $fullYears = floor($fullYears); // Dersom det er mindre enn to år bruker vi resten etter // divisjonen til å beregne antall måneder også.. if ($fullYears <= 2) { // Bruker modulusoperatoren til å finne resten etter divisjonen. $fullMonths = ($now - $bdTimestamp) % (86400 * 365); // 30 dager i hver måneded er nært nok sannheten.. $fullMonths /= 86400 * 30; // Runder av nedover $fullMonths = floor($fullMonths); return "$fullYears år og $fullMonths måneder."; } return "$fullYears år."; } echo birthday("7.11.2007") . "\n"; echo birthday("9.1.2007") . "\n"; echo birthday("21.1.2002") . "\n"; ?> Output: kim@Myth:~$ php aar.php 0 år og 4 måneder. 1 år og 2 måneder. 6 år. 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å