Gå til innhold

Alder-funksjon med måneder


Anbefalte innlegg

Skrevet

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!

Videoannonse
Annonse
Skrevet

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?

Skrevet

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");

?>

Skrevet

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.

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...