Gå til innhold

Hvordan regne ut alder utifra fødselsdato ?


Anbefalte innlegg

Videoannonse
Annonse

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 av NH
Lenke til kommentar

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

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 av NH
Lenke til kommentar

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

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

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 av kakkle
Lenke til kommentar

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

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 av kakkle
Lenke til kommentar
  • 3 måneder senere...
  • 3 uker senere...

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

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å
×
×
  • Opprett ny...