Ankündigung

Einklappen
Keine Ankündigung bisher.

Alter einer Person anzeigen, wird oder ist ... alt

Einklappen

Neue Werbung 2019

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

  • Alter einer Person anzeigen, wird oder ist ... alt

    Hallo,
    ich lasse eine Liste ausgeben, in der Personen mit den Geburtstagen vorhanden sind. Nun möchte ich, dass
    in der Liste angezeigt wird ob die betreffende Person z.B. 23 Jahre alt geworden ist bzw. wenn der Geburtstag
    in der Zukunft liegt dann eben 23 Jahre alt wird. Meine bisherigen Versuche klappten irgendwie nicht wie erhofft.

    Hier mal mein bisheriger Code:
    PHP-Code:
    $data['userbirthdaylist'][$key]->geburtstag nice_date($data['userbirthdaylist'][$key]->geburtstag'd.m.Y');
                
    $datum explode('.'$data['userbirthdaylist'][$key]->geburtstag);
                
    $birthday $datum[0];
                
    $birthmonth $datum[1];

                if (
    $birthmonth >= date('m') AND $birthday >= date('d')) {
                    
    $data['userbirthdaylist'][$key]->istwird 'wird';
                    
    $data['userbirthdaylist'][$key]->geworden '';
                    
    $data['userbirthdaylist'][$key]->user_age $this->user_age($value->geburtstag) + 1;
                }else{
                    
    $data['userbirthdaylist'][$key]->istwird 'ist';
                    
    $data['userbirthdaylist'][$key]->geworden 'geworden';
                    
    $data['userbirthdaylist'][$key]->user_age $this->user_age($value->geburtstag);
                } 
    Das klappt nur soweit nicht ein anderer zwar erst im Oktober Geburtstag hat aber z.B. schon am 01. denn dann wird auch angezeigt ist am 01.10. 23 geworden
    obwohl stehen müsste wird am 01.10. 23 Jahre alt, da ja heute der 04. ist und somit der 01. natürlich auch kleiner.

    Hab es auch schon mit DateTime() versucht, aber der Geburtstag ist natürlich immer kleiner als heute()

  • #2
    Chaotischer Code. Birthday, Geburtstag, lass doch bitte diesen Deutsch/Englisch-Mischmasch sein.

    Davon abgesehen ist der Code unvollständig und somit nicht testbar.

    Kommentar


    • #3
      Siehe Wissenssammlung Datetime Differenzen.

      Kommentar


      • #4
        hellbringer der Code kam aus Codeigniter ich hab die relevante Stelle hier reinkopiert, man sieht WAS kommt, WIE es verarbeitet wurde UND die Abfrage. geburtstag kommt aus der DB da hab ich keinen Einfluss drauf.

        protestix Vielen Dank, ich hatte zwar schon mit Datetime versucht aber erst heute kam mir diesbezüglich das Licht auf.
        PHP-Code:
        $thisyear date('Y');
        $datetime1 = new DateTime($thisyear.'-'.$birthmonth.'-'.$birthday);
        $datetime2 = new DateTime(); 
        Danke, habe fertig.

        Kommentar


        • #5
          Du must für deine Aufgabe 2 Dinge ermitteln, das echte Alter und ob im aktuellen Jahr der Geburtstag noch bevorsteht. Dafür nimm DateTime::diff. Ich nutze hier zur Demonstration eine eigene DateTime-Klasse.
          Das echte Alter zu ermitteln ist kein Problem:
          PHP-Code:
          $dateOfBirth "1983-07-02";
          $age dt::create($dateOfBirth)->diffTotal('today','Years'); 
          Um festzustellen, ob im aktuellen Jahr der Geburtstag noch bevorsteht, kann das Geburtsdatum modifiziert mit dem aktuellen Jahr mit dem aktuellen Tag verglichen werden:
          PHP-Code:
          $birthDayInFuture dt::create($dateOfBirth)->setYear() > dt::create('today'); 
          Wenn du mit DateTime-Objekten arbeitest, kannst du diese direkt vergleichen.

          Deine Bedingung
          PHP-Code:
          if ($birthmonth >= date('m') AND $birthday >= date('d')) { .. 
          ist logisch falsch. Der Tag ist nur von Bedeutung, wenn der Monat gleich ist.


          Kommentar


          • #6
            Zitat von Zero2000 Beitrag anzeigen
            Hallo,
            wenn der Geburtstag in der Zukunft liegt dann eben 23 Jahre alt wird.
            Das ist lustig, denn wenn du nur Tag und Monat betrachtest, liegt JEDER Geburtstag in der Zukunft und in der Vergangenheit. Beim letzten Geburtstag ist er/sie 22 geworden, beim nächsten wird er/sie 23..
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              lstegelitz genau deswegen kam ich so durcheinander und wie jspit schon schrieb war meine Bedingung logisch falsch und war nur von Bedeutung wenn der Monat gleich ist, also wie eine "wer hat in diesem monat geburtstag"-Liste , welche ich im übrigen auch habe.

              jspit genau das habe ich ja getan, siehe Post #4, gut vielleicht nicht so elegant, aber funktioniert
              PHP-Code:
              $datum explode('.'$data['userbirthdaylist'][$key]->geburtstag);
              $birthday $datum[0];
              $birthmonth $datum[1];
              $thisyear date('Y');

              $datetime1 = new DateTime($thisyear.'-'.$birthmonth.'-'.$birthday);
              $datetime2 = new DateTime();

              if (
              $datetime1 >= $datetime2

              Kommentar


              • #8
                Egal wo du Daten speicherst, solltest du dich immer an den ISO Standard halten für Datum/Zeit Werte.
                Lediglich bei der Darstellung bzw. Ausgabe kannst du dich dann an den Gegebenheiten des Benutzers halten( Useragent) und das Format anpassen.
                echo $dt->format('d.m.Y');

                DateTime kennt darüber hinaus auch die Methode date_create_from_format, das dir das Zerpflücken der Datumszeichenkette abnimmt.

                Kommentar


                • #9
                  Das deutsche Format erkennt DateTime von der Stange, wenn das Jahr vierstellig ist. Wenns abweichende Formate sind dann muss man eh mit CreateFromFormat ran.. oder wenn man auf Nummer sicher gehen will, wobei mir ist kein Fall bekann wo es so falsch erkannt wurde.

                  PHP-Code:
                  print_r( new DateTime('25.10.1980') ) ;
                  /*
                  DateTime Object
                  (
                      [date] => 1980-10-25 00:00:00.000000
                      ...
                  */ 
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Das deutsche Format erkennt DateTime von der Stange, wenn das Jahr vierstellig ist. Wenns abweichende Formate sind dann muss man eh mit CreateFromFormat ran.. oder wenn man auf Nummer sicher gehen will, wobei mir ist kein Fall bekann wo es so falsch erkannt wurde.
                    Es macht trotzdem keinen Sinn Daten im deutschen Format zu speichern. Formatierung sollte immer in der Ausgabe stattfinden und nicht in der Datenhaltung.

                    Kommentar


                    • #11
                      Natürlich nicht, dem hab ich ja auch nicht widersprochen. Das wäre ja pervers/absolut sinnlos ein Datum so zu speichern. Das war nur als Hinweis zu CreateFromFormat gedacht, das man für das ISO Format gar nicht braucht.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar

                      Lädt...
                      X