Rechenfehler in if-funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rechenfehler in if-funktion

    Hallo. Ich möchte ein kleines Script zur Altersberechnung schreiben, die Werte habe ich soweit nun alle und komme zur genaueren Bestimmung, sprich geb.Jahr wurde von heutjahr abgezogen und möchte nun ggf. ein -1 haben für den Fall dass der geburtsmonat "größer" oder gleich dem aktuellen ist UND nochmal geprüft wird, ob bei gleichem Monat der Geburtstag kleiner ist als der aktuelle um dann wieder 1 Jahr draufzusetzen was ich vorher wegen des gleichen monats abgezogen habe, ihr versteht es vielleicht besser wenn ich mein Code mal zeige:
    PHP-Code:
    if ($mm >= $heutemm)  
    {
        
    $alter $alter 1;
        
        if (
    $mm == $heutemm && $dd $ddheute
        { 
        
    $alter $alter 1;
        }
    }

    echo 
    $alter
    Ich nehme an dass ich entweder ein Logik oder Syntax Problem habe, komme aber alleine nicht so recht drauf warum er mir das nicht korrekt ausrechnet.

    Hoffe aus Hilfe
    Gruß

  • #2
    PHP-Code:
    $geburtstag "1981-10-04";

    $alter substr(date("Ymd") - date("Ymd"strtotime($geburtstag)), 0, -4); 

    Kommentar


    • #3
      Es gibt keine if Funktionen...

      PHP-Code:
      function wie_alt($geburtsdatum,$heute='')
      {
        list(
      $ht,$hm,$hj) = explode('.',empty($heute)?date('d.m.Y'):$heute) ;
        list(
      $gt,$gm,$gj) = explode('.',$geburtsdatum) ;
        return ((
      $hm<$gm)||(($hm==$gm)&&($ht<$gt)))?$hj-$gj-1:$hj-$gj;
      }


      $geburtsdatum '23.11.1936';


      echo 
      wie_alt($geburtsdatum); 
      Wir werden alle sterben

      Kommentar


      • #4
        Hallo und Danke für die Alternativvorschläge! Ich verwerfe meine eigene Idee sehr ungern - gibt es denn an meinem Code oben etwas auszusetzen bzw. ist dein Vorschlag, verzeih mein Fehler im Topic (es geht mir nicht darum, es in eine Funktion zu schreiben sondern ich hatte fälschlicherwiese angenommen man nennt meinen Kram oben so), denn so nicht umsetzbar? Ich habe es im Grunde wie du gemacht, nur dass ich statt explode den string in Einzelzeichen zersetzt und dann in 2er-packen in eine Variable gepackt hab ohne die Punkte (das script dient einzig zu lern und experimentier zwecken) mitzunehmen.

        Falls man das so mit if nicht regeln kann, würde mir eine schlichte Aussage reichen - Alternativvorschläge habe ich ja, dankbar, bereits angenommen.

        Gruß

        Kommentar


        • #5
          Zitat von Meilenwald Beitrag anzeigen
          Ich verwerfe meine eigene Idee sehr ungern
          Dann betreibe Debugging - Kontrollausgabe, welche Variablen zu welchem Zeitpunkt welche Inhalte haben.

          Falls man das so mit if nicht regeln kann
          combies Vorschlag verwendet genauso Bedingungen und Abfragen - nur in "kondensierterer" Form, in dem er den tenären Operator verwendet. Und der funktioniert ähnlich(!) wie ein if.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von Meilenwald Beitrag anzeigen
            Hallo und Danke für die Alternativvorschläge! Ich verwerfe meine eigene Idee sehr ungern
            PHP-Code:
            if ($mm $heutemm || ($mm == $heutemm && $dd $ddheute))
            {
                
            $alter $alter 1;

            Kommentar


            • #7
              In meinem Vorschlag steckt auch ein kleines, fast unsichtbares, IF im ?:; versteckt.

              Der Vorschlag von h3ll hat den Nachteil, dass er auf manchen Systemen vor 1970 falsche Ergebnisse liefern kann.
              Wir werden alle sterben

              Kommentar


              • #8
                Zitat von combie Beitrag anzeigen
                Der Vorschlag von h3ll hat den Nachteil, dass er auf manchen Systemen vor 1970 falsche Ergebnisse liefern kann.
                PHP-Code:
                $geburtstag "1980-05-09";

                $alter substr(date("Ymd") - vsprintf("%04u%02u%02u"sscanf($geburtstag"%u-%u-%u")), 0, -4); 
                Zufrieden?

                Kommentar


                • #9
                  Vielen Dank euch beiden! So passt es

                  Schönen Abend noch,
                  Meilenwald

                  Kommentar

                  Lädt...
                  X