Alter berechnen, schaltjahr fehler

Godstyle

Erfahrenes Mitglied
Moin Gemeinde,

ich hab hier ein kleines Problem, denn ich bekomme das Schaltjahr nicht eingebaut, vlt kann mir wer helfen.

Hier der Code:

Das Geb datum steht wie folgt in der db: 20.8.1985

PHP:
$teile = explode(".", $gebdata);
$tag = $teile[0]; 
$mon = $teile[1]; 
$jah = $teile[2]; 

   $jetzt = mktime(0, 0, 0, date('m'), date('d'), date('Y')); 
   $gebur = mktime(0, 0, 0, $mon, $tag, $jah); 
   $age   = intval(($jetzt - $gebur) / (3600 * 24 * 365));

lg
 
Deine Umrechnung ist recht kompliziert.

PHP:
$birth = '20.8.1985';

$age = floor((time()-strtotime($birth)) / (60*60*24*365));

echo $age;

Was genau meinst du denn mit Schaltjahr einbauen?
Falls es dir um den einen Tag mehr oder weniger geht, dann rechne eben mit 365.25 Tagen statt 365... Dadurch hast du es automatisch drin.
 
Moin, wenn ich mit 365,25 rechne dann ist es ungenau, ich habe nur derzeit das Problem, dass wenn ich zB am 20.6. geburtstag hätte, ich heute schon 26 währe.
 
Wenn du PHP >= 5.3 hast, kannst du folgende Methode verwenden:
PHP:
function calcAge($birthday, $birthmonth, $birthyear)
{
  $dob = new DateTime("$birthyear-$birthmonth-$birthday");
  $datetime2 = new DateTime();

  $interval = $dob->diff($datetime2);
  
  return intval($interval->format("%y"));
}
Ansonsten gab es vor einigen Tagen auch das gleiche Thema hier: PHP - Alter berechnen lassen
 
Also keine Ahnung was du da machst aber:

PHP:
$birth = '19.6.1985';

$age = floor((time()-strtotime($birth)) / (60*60*24*365.25));

echo $age;

Gibt bei mir eindeutig 25 aus.
 
Wenn du die abfrage nun um 0Uhr 1 machst wird es nicht stimmen, du gibst vor, das Jedes Jahr 6 std länger ist als es eigentlich ist, somit kommt immer eine abweichung rein und es würde nur in einem Schaltjahr stimmen.
Den Ansatz hatte ich auch bereits mit 365.25
 
Schau dir mal mktime genauer an das berücksichtigt meines wissens schaltjahre

PHP:
// $datum hier im Format YYYY-MM-DD
function getAlter($datum){
$age = explode("-",$datum);
$alter = date("Y",time())-$age[0];
if (mktime(0,0,0,date("m",time()),date("d",time()),date("Y",time())) < mktime(0,0,0,$age[1],$age[2],date("Y",time())))
$alter--;
return $alter;
}// end of getAlter()
 
Zurück