Location: PHPKode > projects > HuMo-gen > include/calculate_age_cls.php
<?php
// *** Script door Yossi Beck ***
class berekening_jaar_cls{
function maandvinder($datum) {
	$month=substr($datum, -8, 3);
	if($month=="JAN")      {$maand=1;}
	else if($month=="FEB") {$maand=2;}
	else if($month=="MAR") {$maand=3;}
	else if($month=="APR") {$maand=4;}
	else if($month=="MAY") {$maand=5;}
	else if($month=="JUN") {$maand=6;}
	else if($month=="JUL") {$maand=7;}
	else if($month=="AUG") {$maand=8;}
	else if($month=="SEP") {$maand=9;}
	else if($month=="OCT") {$maand=10;}
	else if($month=="NOV") {$maand=11;}
	else if($month=="DEC") {$maand=12;}
	else {$maand=null;}
	return($maand);
}

function dagvinder($datum) {
	$dag="";
	if (strlen($datum)==11) {    // 12 sep 2002 or 08 sep 2002
		$dag=substr($datum, -11, 2);
		if(substr($dag,0,1)=="0") {   // 08 aug 2002
			$dag=substr($dag,1,1);
		}
	}
	if (strlen($datum)==10) {    // 8 aug 2002
		$dag=substr($datum, -10, 1);
	}
	if ($dag) {
		$dag=(int)$dag;
	}
	if ($dag>0 AND $dag<32) {}
	else { $dag=null; }
	return($dag);
}

function jaarvinder($datum) {
	$jaar=substr($datum,-4, 4);
	if ($jaar < 2100 AND $jaar > 0) {}
	else { $jaar=null;}
	return ($jaar);
}

function opmerkingbehandelen($datum1, $datum2, $doop) {
	global $language;
	$opm1=null; // van pers_birth_date
	$opm2=null; // van pers_death_date
	$weergave=null;

	if (strlen(stristr($datum1,"BEF"))>0){$opm1="Bef";}
	else if (strlen(stristr($datum1,"AFT"))>0){$opm1="Aft";}
	else if (strlen(stristr($datum1,"ABT"))>0){$opm1="Abt";}
	else if (strlen(stristr($datum1,"EST"))>0){$opm1="Abt";}  // ik beschouw Abt, Est en Cal als hetzelfde wat de leeftijd betreft
	else if (strlen(stristr($datum1,"CAL"))>0){$opm1="Abt";}  // ik beschouw Abt, Est en Cal als hetzelfde wat de leeftijd betreft
	else if (strlen(stristr($datum1,"BET"))>0){$opm1="Bet";}  // BET gevallen worden hieronder als niet weer te geven behandeld
	else {$opm1=null;}

	if (strlen(stristr($datum2,"BEF"))>0){$opm2="Bef";}
	else if (strlen(stristr($datum2,"AFT"))>0){$opm2="Aft";}
	else if (strlen(stristr($datum2,"ABT"))>0){$opm2="Abt";}
	else if (strlen(stristr($datum2,"EST"))>0){$opm2="Abt";}  // ik beschouw Abt, Est en Cal als hetzelfde wat de leeftijd betreft
	else if (strlen(stristr($datum2,"CAL"))>0){$opm2="Abt";}  // ik beschouw Abt, Est en Cal als hetzelfde wat de leeftijd betreft
	else if (strlen(stristr($datum2,"BET"))>0){$opm2="Bet";}  // BET gevallen worden hieronder als niet weer te geven behandeld
	else {$opm2=null;}

	if($opm1 OR $opm2) { // er is op minst 1 opmerking
		if($opm1==="Bef") {
			if($opm2==="Bef" OR $opm2==="Abt") { $weergave=-1;}  // kan niet de leeftijd berekenen. flag -1
			else if ($opm2===null OR $opm2==="Aft") {  $weergave=$language["age_min"]." "; }
		}
		else if($opm1==="Aft") {
			if($opm2==="Aft" OR $opm2==="Abt") {  $weergave=-1;}  // kan niet de leeftijd berekenen. flag -1
			else if ($opm2===null OR $opm2==="Bef") {  $weergave=$language["age_max"]." "; }
		}
		else if($opm1==="Abt") {
			if($opm2==="Bef" OR $opm2==="Aft") {  $weergave=-1;}  // kan niet de leeftijd berekenen. flag -1
			else if ($opm2===null OR $opm2==="Abt") {  $weergave=$language["age_abt"]." "; }
		}
		else if($opm1===null) {
			if($opm2==="Bef") { $weergave=$language["age_max"]." "; }
			else if ($opm2==="Aft") {  $weergave=$language["age_min"]." "; }
			else if ($opm2==="Abt") {  $weergave=$language["age_abt"]." "; }
		}
		else if($opm1==="Bet" OR $opm2==="Bet") {  $weergave=-1;}   // wil bij BET gevallen geen leeftijd weergeven, sorry...
	}
	else {
		// er zijn geen opmerkingen
		$weergave=null;
	}

	// *** Bij berekening met een doop datum altijd ongeveer weergeven ***
	if ($doop==true AND $weergave!=-1){ $weergave=$language["age_abt"]." "; }

	return($weergave);
}

function leeftijd_berekenen($doop_datum, $geb_datum,$ov_datum, $age_check=false) {
	$geb_datum=strtoupper($geb_datum);

	// *** Leeftijd ook berekenen als er alleen een doop en overlijdens datum bekend is ***
	$doop=false;
	if ($geb_datum==''){
		$doop=true;
		$geb_datum=$doop_datum;
	}

	// *** Leeftijd ook berekenen bij levende personen ***
	$levend=false;
	if(function_exists('date_default_timezone_set')){
		date_default_timezone_set('Europe/Amsterdam');
	}	
	$datum=date("j M Y");
	
	if ($ov_datum==''){
		$levend=true;
		$ov_datum=$datum;
	}

	$ov_datum=strtoupper($ov_datum);
	$leeftijd=''; // *** Berekende leeftijd ***
	$age="";
	global $language;

	if (($geb_jaar=$this->jaarvinder($geb_datum)) AND ($ov_jaar=$this->jaarvinder($ov_datum))) { //er zijn op zijn minst twee jaartallen....

// kijken of er EST AFT ABT enz zijn en of de leeftijd te berekenen is
// als niet te berekenen is $opmerking -1 en wordt er daardoor zodadelijk geen leeftijd weer gegeven
		$opmerking=$this->opmerkingbehandelen($geb_datum,$ov_datum,$doop);

		if($geb_jaar==$ov_jaar) { // geb 1850 - ovl 1850
			if(!$opmerking) {
				$age=$language["age_under_1"];
			}
			else {
				if($opmerking!=-1) {  //het is geen opmerking (of combinatie ervan) die niet worden weergegeven
				  //print "BOOGIE";
				  $age=$opmerking.$language["age_1"];
				}
			}
		}
		else { //jaartallen zijn niet hetzelfde we hebben maand nodig voor preciese leeftijd
			if (($geb_maand=$this->maandvinder($geb_datum))  AND ($ov_maand=$this->maandvinder($ov_datum))) { //er zijn 2 maanden
				if($geb_maand==$ov_maand) { // zelfde maand: we hebben dag nodig voor preciese leeftijd
					if (($geb_dag=$this->dagvinder($geb_datum)) AND ($ov_dag=$this->dagvinder($ov_datum))) { // er zijn 2 dagen
						// *** Bij een doop de tekst "ongeveer" weergeven ***
						if ($opmerking){ $age=$opmerking; }
						if (($geb_dag==$ov_dag) OR ($geb_dag < $ov_dag)) {
							$leeftijd=$ov_jaar - $geb_jaar;
							$age.=$leeftijd." ".$language["age_year"];
						}
						else if ($geb_dag > $ov_dag) {
							$leeftijd=($ov_jaar - $geb_jaar)-1;
							$age.=$leeftijd." ".$language["age_year"];
						}
					}
					else { // aan 1 of 2 datums ontbreekt de dag
						if(!$opmerking) {
							$leeftijd=($ov_jaar - $geb_jaar)-1;
							$age=$leeftijd." ".$language["age_or"]." ".($ov_jaar - $geb_jaar)." ".$language["age_year"];
						}
						else {
							if($opmerking!=-1) {  //het is geen opmerking (of coombinatie ervan) die niet worden weergegeven
								$leeftijd=$ov_jaar - $geb_jaar;
								$age=$opmerking.$leeftijd." ".$language["age_year"];;
							}
						}
					}
				}
				else if ($geb_maand < $ov_maand) { //geen dag nodig
					if($opmerking!=-1) {
						$leeftijd=$ov_jaar - $geb_jaar;
						$age=$opmerking.$leeftijd." ".$language["age_year"];
					}
				}
				else if ($geb_maand > $ov_maand) { // geen dag nodig
					if($opmerking!=-1) {
						$leeftijd=($ov_jaar - $geb_jaar)-1;
						$age=$opmerking.$leeftijd." ".$language["age_year"];
					}
				}
			}
			else { // aan 1 of allebei de jaartallen ontbreekt de maand
				if(!$opmerking) { // geen EST ABT AFT BEF
					//$age=(($ov_jaar - $geb_jaar)-1)." or ".($ov_jaar - $geb_jaar)." ".$language["age_year"];  // bijv: 45 of 46 jaar
					$leeftijd=($ov_jaar - $geb_jaar)-1;
					$age=$leeftijd." ".$language["age_or"]." ".($ov_jaar - $geb_jaar)." ".$language["age_year"];
				}
				else { //
					if($opmerking!=-1) {
						$leeftijd=$ov_jaar - $geb_jaar;
						$age=$opmerking.$leeftijd." ".$language["age_year"];
					}
					//het heeft geen zin te geven: "ongeveer 45 of 46 jaar", "hoogstens 45 of 46 jaar"
					//daarom schrijven we: "ongeveer 46 jaar", hoogstens 46 jaar
				}
			}
		}
		if($age) { $age=", ".$age;}

		if ($leeftijd>100){ $age=''; }

		if ($age_check==true){ $age=$leeftijd; }

		return($age);
	}
}
} // Einde class
?>
Return current item: HuMo-gen