Function ago($time) Problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Function ago($time) Problem

    Soweit bin ich mit folgendem Code !

    Mein Problem nun ist das ich bei den letzten beiden IF kein true bekomme trotz gefüllter Variable. Die Variable wird mir angezeigt der Zusatz nicht.

    Woran könnte das liegen ?

    PHP Code:
    <?php

    function ago($time)
    {
       
    $periods = array("Sekunde""Minute""Stunde""Tag""Woche""Monat""Jahr""Jahrzehnt");
       
    $lengths = array("60","60","24","7","4.35","12","10");

       
    $now time();

           
    $difference     $now $time;
           
    $tense         "vor";

       for(
    $j 0$difference >= $lengths[$j] && $j count($lengths)-1$j++) {
           
    $difference /= $lengths[$j];
       }

       
    $difference round($difference);

       if(
    $difference != 1) {
          if( (
    $periods == "Sekunde") || ($periods == "Minute") || ($periods=="Stunde")|| ($periods=="Woche") ) {
           
    $periods[$j] .= "n";
          }

          if( (
    $periods == "Tag") || ($periods == "Jahr") || ($periods=="Jahrzehnt") ) {
          
    $periods[$j] .= "en";   
          }

       }

       return 
    "$tense $difference $periods[$j]";
    }
    ?>
    Vielen Dank.

    Mit freundlichen Grüßen
    Incoming

  • #2
    Was fragst Du ab, einen alten Timestamp?
    Bei mir funktioniert es. Beispiel:

    PHP Code:
    echo ago("1364895786");  // vor 2 Minute 
    Oder meintest Du, dass nur die jeweils höchste Periode ausgegeben wird?
    Also, dass zum Beispiel bei Minuten keine Sekunden ausgegeben werden?

    So wie die Funktion geschrieben ist, wird der Rest wohl unterschlagen werden, da eine Funktion nur den letzten Wert zurückgeben kann. Eventuell müsstest Du dazu die Perioden in aufeinander aufbauenden Schleifen verschachteln, wobei immer nur der aktuelle Restwert in der kleineren Periode erhalten bleibt. Dann vor der Rückgabe alles miteinander verknüpfen. So in etwa würde ich es zumindest beginnen und es mir zwischendurch noch dreimal anders überlegen.

    Der nächste Gedanke könnte sein, da Dir ja die Differenz in Sekunden vorliegt, diesen Wert gleich durch Sekunden, Minuten, Stunden, Tage usw. zu teilen. Bei der höchsten Periode beginnen und wenn die Teilung keinen Minuswert ergibt, mit dem Restwert die nächste Periode berechnen, dazu bedarf es dann nicht einmal einer Schleife, denke ich zumindest.
    Last edited by Melewo; 02-04-2013, 11:55.

    Comment


    • #3
      Hi,

      warum arbeitest Du nicht gleich mit PHP: DateTime::diff - Manual ??

      mfg streuner
      Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
      der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

      "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

      Comment

      Working...
      X