2010-12-16 10 views
2

私はニュースフィードを作成しようとしており、その一部として、ニュース記事が公開されてからどのくらいの時間が経過しているかをユーザーに表示したいと思っています。 、PHPが投稿から時間を稼ぐ

掲示される:1分5秒前

は、しかし、私は私の関数から取得していますすべてが

40年と11ヶ月前

、これです

これは、私がこのようになります何でも、私は関数に送信タイムスタンプ、投稿以来、時間をうまくいく機能、

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 =タイムスタンプ何か得るものですフォーマットツイート機能において

1292534103、私はそれは、以下の両方の関数として偽で返すformatTweet関数内からrelativeTimeに$dtを渡すときしかし、$dtから値を取得することができる午前

 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; 
} 

そして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

[php - 秒の残り時間?](http://stackoverflow.com/questions/4415336/php-seconds-to-time-left) – ajreal

答えて

4

あなたはPHP 5.3以降を使用している場合は、PHPに追加された新しいDate and Timeクラスを利用することができます。

具体的には、DateTimeformat、その後することができますDateIntervalクラスを返すdiff方法があります。

0

あなたは$ dtの中で値を送信することを確信していますか?

40年11月は、1970年1月1日のように、エポックタイムの始まりです。

time()は1970年以降の秒数を示します。したがって、$ dt = 0の場合は、結果が表示されます。

このチェックを行った後、私に連絡してください。私は、これはあなたを助けることを願っています

ジェローム・ワグナーは

+0

ジェローム、私の編集を参照してください –

関連する問題