Gå til innhold

Alder-funksjon med måneder


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...