2010-12-16 6 views
2

J'essaie de créer un fil de nouvelles, et dans le cadre de cela, je veux montrer à l'utilisateur depuis combien de temps l'article a été publié, quelque chose qui ressemblerait à ceci ,PHP temps de travail depuis le poste

Publié: 1 minute et 5 secondes il y a

Cependant tout ce que je reçois de ma fonction est ce,

40 ans et il y a 11 mois

C'est ce que je reçois ce que le timbre fois que j'envoie à la fonction, la fonction qui fonctionne le temps écoulé depuis l'affichage,

function relativeTime($dt,$precision=2) 
{ 
    $times=array( 365*24*60*60 => "year", 
       30*24*60*60  => "month", 
       7*24*60*60  => "week", 
       24*60*60  => "day", 
       60*60   => "hour", 
       60    => "minute", 
       1    => "second"); 

    $passed=time()-$dt; 



    if($passed<5) 
    { 
     $output='less than 5 seconds ago'; 
    } 
    else 
    { 
     $output=array(); 
     $exit=0; 
     foreach($times as $period=>$name) 
     { 
      if($exit>=$precision || ($exit>0 && $period<60)) break; 
      $result = floor($passed/$period); 
     //die($result); 
      if($result>0) 
      { 
       $output[]=$result.' '.$name.($result==1?'':'s'); 
       $passed-=$result*$period; 
       $exit++; 
      } 

      else if($exit>0) $exit++; 

     } 
     $output=implode(' and ',$output).' ago'; 
    } 

// die($output); 
    return $output; 
} 

$ dt = quelque chose d'horodatage qui ressemble à ceci, 1292534103

Dans la fonction tweet format, je suis en mesure d'obtenir une valeur de $dt, mais quand je passe à $dt relativeTime à partir de la fonction formatTweet elle retourne false, ci-dessous sont les deux fonctions,

 function relativeTime($dt,$precision=2) 
{ 
    $times=array( 365*24*60*60 => "year", 
       30*24*60*60  => "month", 
       7*24*60*60  => "week", 
       24*60*60  => "day", 
       60*60   => "hour", 
       60    => "minute", 
       1    => "second"); 

    $passed=time()-$dt; 



    if($passed<5) 
    { 
     $output='less than 5 seconds ago'; 
    } 
    else 
    { 
     $output=array(); 
     $exit=0; 
     foreach($times as $period=>$name) 
     { 
      if($exit>=$precision || ($exit>0 && $period<60)) break; 
      $result = floor($passed/$period); 
     //die($result); 
      if($result>0) 
      { 
       $output[]=$result.' '.$name.($result==1?'':'s'); 
       $passed-=$result*$period; 
       $exit++; 
      } 

      else if($exit>0) $exit++; 

     } 
     $output=implode(' and ',$output).' ago'; 
    } 

// die($output); 
    return $output; 
} 

Et la fonction formatTweet

function formatTweet($company_logo = '', $company_name = 'moovjob', $tweet, $dt) 
{ 
    if(is_string($dt)) $dt=strtotime($dt); 

    $tweet=htmlspecialchars(stripslashes($tweet)); 
    //die(print_r($dt)); 
    return' 
    <li><a href="#"><img class="avatar" src="/media/images/employers/'.$company_logo.'width="48" height="48" alt="avatar" /></a> 
    <div class="tweetTxt"> 
    <strong><a href="#">'.$company_name.'</a></strong> '. preg_replace('/((?:http|https|ftp):\/\/(?:[A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?[^\s\"\']+)/i','<a href="$1" rel="nofollow" target="blank">$1</a>',$tweet).' 
    <div class="date">'.relativeTime($dt).'</div> 
    </div> 
    <div class="clear"></div> 
    </li>'; 
} 
+0

duplication possible de [php - secondes à temps restant?] (Http://stackoverflow.com/questions/4415336/php-seconds-to-time-left) – ajreal

Répondre

0

Etes-vous sûr que vous envoyez une valeur dt $?

Il ya 40 ans et 11 mois ressemble beaucoup au 1er janvier 1970, qui est le début de l'époque. Time() donne le nombre de secondes depuis 1970, donc si $ dt = 0 vous obtenez le résultat que vous voyez. Tenez-moi au courant après avoir fait cette vérification.

J'espère que cela vous aidera,

Jérôme Wagner

+0

Jerome, s'il vous plaît voir mon edit –

Questions connexes