Alter unter Windows berechnen ? :)



  • Hi,

    ich will das Alter von einem bestimmten Datum berechnen lassen.
    Dazu habe ich folgenden Code:

    $tag   = 1;
       $monat = 6;
       $jahr  = 1950;
    
       $jetzt = mktime(0,0,0,date("m"),date("d"),date("Y"));
       echo mktime(0,0,0,$monat,$tag,$jahr);
       $alter   = intval(($jetzt - $gebur) / (3600 * 24 * 365));
    
       echo "Du bist $alter Jahre alt.";
    

    Bei diesem Code kommt folgendes:

    Warning: mktime(): Windows does not support negative values for this function in c:\development\interpedia\projects\egl\quellcodes\e1\public\index.php on line 16
    -1Du bist 35 Jahre alt.

    Liegt wohl daran, dass mktime nur mit Daten über 1970 auskommt.

    Kann man da was machen ? 🙂

    Ciao



  • Falls es nur um das Alter geht:

    $alter = date('Y') - $jahr;
    // falls man in diesem Jahr noch nicht Geburtstag hatte wieder ein Jahr abziehen
    if(mktime(0,0,0,$monat,$tag+1) < time()) {
      $alter--;
    }
    


  • hm, hat irgendwie nicht ganz funktioniert ....

    folgender Code müsste funktionieren:

    $year 	= 1985;
    	$day 	= 30;
    	$month 	= 09;
    
    	$age = date('Y') - $year;
    	// falls man in diesem Jahr noch nicht Geburtstag hatte wieder ein Jahr abziehen
    
    	#echo mktime(0,0,0,$month,$day);
    
    	$diff = (mktime(0,0,0,$month,$day,date('Y') ) - mktime(0,0,0,0,0,date('Y'))); 
    	$curr_diff = (mktime(0,0,0,(int)date('m'),(int)date('d'),date('Y') ) - mktime(0,0,0,0,0,date('Y'))); 
    
    	if( $diff > $curr_diff )
    		$age--;
    

    Cioa



  • function getalter($date_of_birth) {
       list ($year, $month, $day) = explode('-', $date_of_birth);
        $age = date('Y') - $year;
        if (date('m') < $month) $age--;
        elseif (date('d') < $day) $age--;
        return $age;
    }
    


  • Sorry, es muss natürlich statt < > heißen:

    $alter = date('Y') - $jahr;
    // falls man in diesem Jahr noch nicht Geburtstag hatte wieder ein Jahr abziehen
    if(mktime(0,0,0,$monat,$tag+1) > time()) {
      $alter--;
    }
    

    @Unix-Tom: Wenn der Monat größer, aber der Tag kleiner ist, liefert dein Code das falsche Ergebnis. Denn die 2. Abfrage darfst du nur machen, wenn der Monat gleich ist.


Anmelden zum Antworten