Timestamp wird nicht genau zerlegt

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

  • Timestamp wird nicht genau zerlegt

    Hi

    Ich habe ein Problem mit einem Countdown, der die Lebenszeit eines Kindes (oder eher noch Babys) in Jahren, Monaten und Tagen anzeigen soll.
    Allerdings gibt es ,je weiter das Geburtsdatum zurück reicht, immer eine grössere Abweichung. :/
    Auch wenn es zuerst nur ein paar Tage sind.

    Es sollte zumindest seit dem Jahr 2000 genau sein, besser noch seit 1990. Die Abweichung tritt aber schon seit 2004 auf

    Hier der Code:

    PHP-Code:
            $timestamp mktime(000$monat$tag$jahr);
            
            
    $diff time() - $timestamp;
            
    // Tage ohne Monate ausrechnen (für die Positionierung des Zeigers)
            
    $tmp1 = ($diff - ($diff 31622400)) / 31622400;
            
    $tmp2 $diff - ($tmp1 31622400);
            
    $count = ($tmp2 - ($tmp2 86400)) / 86400;
            
            
    // den Timestamp zerlegen
            
    $years = ($diff - ($diff 31622400)) / 31622400;
            
    $diff $diff - ($years 31622400);
            
    $months = ($diff - ($diff 2635200)) / 2635200;
            
    $diff $diff - ($months 2635200);
            
    $days = ($diff - ($diff 86400)) / 86400;
            
    // Ausgabestring des Datums
            
    $msg $kommentar.$years Jahre .$months Monat(e), $days Tag(e) alt"

    Kann jemand das so umschreiben, dass es genaue Resultate liefert oder kennt jemand einen Code der exakte Daten liefert?

    Vielen Dank schon im Vorraus!

    Mfg F4b

    (PHP-Version ist 5.0.5, Apache 2.0)

  • #2
    Schon mal daran gedacht, dass nicht jedes Jahr und nicht jeder Monat gleich viele Tage haben?
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Hi

      Ja, das ist mir schon klar. Ich habe mir auch gedacht, dass es an den Schaltjahren liegt, aber ich weiss nicht, wie ich es realisieren soll.

      Mfg F4b

      Kommentar


      • #4
        Liegt noch nicht mal allein an den Schaltjahren - du berechnest auch noch nen Monat mit 30,5 Tagen

        Allerdings scheint das Vorhaben auch nicht grad einfach zu sein - zumindest fallen mir jetzt keine fertigen Funktionen ein, die das gewünschte Ergebnis ohne weiteres Ausspucken - evtl. gibts aber sowas schon fertig für PHP -> Forumssuche oder Google

        Denkansatz:
        Zuerst die Differenz in Tagen berechnen - kein Problem -> Differenz der beiden Timestamps durch 86400 - nun vom Ausgangsdatum bis hierher zuerst die Jahre hochtickern und mit den Datumsfuntkionen jeweils prüfen, wieviele Tage das jeweilige Jahr hat, vom Rest genauso mit den Monaten verfahren - die Tage die dann noch übrigbleiben sind dann eh klar.

        Ist jetz auch nicht ausgereift dieser Ansatz - aber evtl. könntest damit arbeiten - oder jemand weiß ne einfachere Methode das zu berechnen - selber denk ich halt gerne mal zu kompliziert
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Weil heut Sonntag ist:

          PHP-Code:
          <?php

              $date1
          ["t"] = 23;
              
          $date1["m"] = 12;
              
          $date1["j"] = 1997;

              
          $date2["t"] = 18;
              
          $date2["m"] = 12;
              
          $date2["j"] = 2005;

              
          $tsp1 mktime(1,1,1,$date1["m"],$date1["t"],$date1["j"],0);
              
          $tsp2 mktime(1,1,1,$date2["m"],$date2["t"],$date2["j"],0);
              
              
          $diff $tsp2 $tsp1;
              
          $tage $diff 86400;
              
              
          $tage_monat date("t",$tsp1);
              
              
          $days 0;
              
          $months 0;
              
          $years 0;

              while(
          $tage 0)
              {
                  
          $days++;
                  
                  if(
          $days >= $tage_monat)
                  {
                      
          $days 0;
                      
          $months++;
                      
                      
          $tage_monat date("t",$tsp1);
                  }
                  
                  if(
          $months >= 12)
                  {
                      
          $months 0;
                      
          $years++;

                  }
                  
                  
          $tage--;
                  
          $tsp1 $tsp1 86400;
                  
          //      echo date("d.m.Y",$tsp1)." : ".$years." Jahre ".$months." Monate ".$days." Tage<br />";
              
              
          }

              echo 
          date("d.m.Y",$tsp1)." : ".$years." Jahre ".$months." Monate ".$days." Tage<br />";

          ?>
          Ist nicht ausführlich getestet und die Namensgebung der Variablen hab ich in der Eile ein wenig verwurschtelt - scheint aber ein brauchbares Resultat zu liefern - zum Testen kannst den Kommentar vor dem echo in der Schleife entfernen, dann kannst jeden Tag prüfen.

          Eigentlich widerstrebt es mir, so eine Berechnung durch ne Schleife zu jagen, aber mir fiel wirklich grad nix besseres ein.
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            afaik gabs dazu hier im Forum schonmal ein Snippet...am besten mal Suchfunktion benutzen!

            [edit]
            ein 100%tig funktionierendes

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              hmm, den direkt-link zum Thread hast ned grad zufällig? oder nen Suchbegriff mit dem man's findet?

              ich hab zwar diverses zu solchen Berechnungen gefunden, aber nix, dass die Ausgabe in Jahr, Monat, Tag aufbereitet.

              Würd mich interessieren obs ne 'schönere' Lösung gibt als meine Schleife - jetzt wo ich mir die Mühe schon gemacht hab

              Hab jetzt auch ein paar Mal durchprobiert, meine Lösung scheint immerhin auch korrekt zu arbeiten.
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                Original geschrieben von Quetschi
                hmm, den direkt-link zum Thread hast ned grad zufällig? oder nen Suchbegriff mit dem man's findet?
                bin ich Gott? Oo,


                google hat spontan mal das ausgespuckt
                PHP-Code:
                <?php
                $birthdate
                ="05.03.1987";
                // geburtsdatum festlegen

                $parth=explode(".",$birthdate);
                // datum in teile zerlegen

                $seconds=mktime(0,0,0,$parth[1],$parth[0],$parth[2]);
                // anzahl sekunden seit 1970 errechnen

                $seconds=time()-$seconds;
                // sekunden seit der geburt errechnen

                $age=date("Y",$seconds)-1970;
                // nach jahreszahl formatieren

                echo $age;
                // alter ausgeben

                ?>
                ka ob das funktioniert (bzw. das aktuelle Datum beachtet und somit das letzte Jahr), aber theoretisch sollte die Lösung einfacher sein, als eine Rumrechnung mit Schleifen ^_~

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Original geschrieben von ghostgambler
                  bin ich Gott? Oo,
                  nö, bestimmt nicht...
                  Original geschrieben von ghostgambler
                  ka ob das funktioniert (bzw. das aktuelle Datum beachtet und somit das letzte Jahr), aber theoretisch sollte die Lösung einfacher sein, als eine Rumrechnung mit Schleifen ^_~ [/B]
                  funktioniert bestimmt nicht so wie vom Threadstarter gewünscht...

                  Bei näherer Überlegung ist aber eine schleife wohl nicht unbedingt notwendig, aber ich hab jetzt keinen Bock mehr das auszudenken.
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Hi

                    Grosses Danke an alle Beteiligten, aber vorallem an Quetschi!

                    Deine Version ist unglaublich exakt

                    Funktioniert nun alles bestens.

                    Wegen den der Schleife: Ich finde es nicht so schlimm, da die Seite für die ich das Script programmiere sowieso nicht extrem viele Besucher haben wird, denke ich zumindest mal.

                    Ausserdem liegt die andere Lösung, falls es sie gibt, nicht gleich auf der Hand und ich bin zufrieden mit dieser

                    Schönen Abend und danke nochmals!

                    Mfg F4b

                    Kommentar

                    Lädt...
                    X