2013-02-15 32 views
0

任何人都可以幫忙請。我有這個腳本從可怕的標準日期轉換mysql時間戳,並以「大約2秒前或大約1小時前」以用戶友好的方式放置它。顯示來自mysql的時間,只要內容發佈?

我的問題是這樣的。它的工作原理完全不同,當用戶發佈內容時,他們發佈的最新內容「大約0個月前」沒有給出它發佈的時間,直到他們發佈了其他內容之後,他們纔看到了該時間他們在此之前發佈。

所以即時通訊不知道爲什麼這是因爲我無法弄清楚,我最好是希望當用戶發佈它時立即說出「剛剛添加」,然後繼續進行腳本說20秒前添加的內容, 2分鐘前等

一個例子是; 「貼約0前」 (內容2)

(內容1) 「貼約8分鐘前」 (內容3) 「貼大約5個小時前」

然後內容1只會每次更新的當另一段內容張貼的時候,否則它不會。

所以內容1應該說剛剛發佈的現在,然後幾秒鐘後,後約5秒前,1分鐘前,5個小時前,7天前等

<div class="board-wall-feeds">   
<div class="social_header"> 
<?php echo "$profile[2]" ?>'s News & Updates: 
</div>   
<?php 

$timeline_set = get_timeline(); 
while ($news = mysql_fetch_array($timeline_set)) { 
echo " 

<div class=\"news_feeds_board_text\">{$news['content']} 
<div class=\"social_footer\">about ".$t.$labels[$i]." ago<a href=\"../../../delete_news_post.php?to=".$news['id']."</div><div class=\"social_clip\"></div></div></a>"; 

    $datetime1 = new DateTime(); 
     $datetime2 = new DateTime ($news['date_added']); 
     $interval = $datetime1->diff($datetime2); 
     $mdhms = explode('-',$interval->format('%m-%d-%H-%i-%s')); 

$labels = Array(' months', ' days', ' hours', ' minutes', ' seconds'); 
$i = 0; 
foreach($mdhms as $t){ 
    if($t > 0) break; 
    $i+=1; 
} 
     } ?> 
     </div> 

回答

3

您可以嘗試relative time function爲這這裏是

function relativetime($ts) 
{ 
    $diff = time() - $ts; 
    if($diff == 0) 
     return 'now'; 
    elseif($diff > 0) 
    { 
     $day_diff = floor($diff/86400); 
     if($day_diff == 0) 
     { 
      if($diff < 60) return 'just now'; 
      if($diff < 120) return '1 minute ago'; 
      if($diff < 3600) return floor($diff/60) . ' minutes ago'; 
      if($diff < 7200) return '1 hour ago'; 
      if($diff < 86400) return floor($diff/3600) . ' hours ago'; 
     } 
     if($day_diff == 1) return 'Yesterday'; 
     if($day_diff < 7) return $day_diff . ' days ago'; 
     if($day_diff < 31) return ceil($day_diff/7) . ' weeks ago'; 
     if($day_diff < 60) return 'last month'; 
     return date('F Y', $ts); 
    } 
    else 
    { 
     $diff = abs($diff); 
     $day_diff = floor($diff/86400); 
     if($day_diff == 0) 
     { 
      if($diff < 120) return 'in a minute'; 
      if($diff < 3600) return 'in ' . floor($diff/60) . ' minutes'; 
      if($diff < 7200) return 'in an hour'; 
      if($diff < 86400) return 'in ' . floor($diff/3600) . ' hours'; 
     } 
     if($day_diff == 1) return 'Tomorrow'; 
     if($day_diff < 4) return date('l', $ts); 
     if($day_diff < 7 + (7 - date('w'))) return 'next week'; 
     if(ceil($day_diff/7) < 4) return 'in ' . ceil($day_diff/7) . ' weeks'; 
     if(date('n', $ts) == date('n') + 1) return 'next month'; 
     return date('F Y', $ts); 
    } 
} 

在此功能,您必須通過time$ts,通過strtotime function轉換。

可以是PHP: producing relative date/time from timestamps

+0

可能重複我已經試過你的代碼,但它有致命錯誤出現不能重新聲明相對時間 – 2013-02-15 05:07:50

+2

變化的函數名'relativeTime'到另一個你'從未used',因爲這兩個函數具有相同名稱時出錯。對於演示,你可以嘗試http://writecodeonline.com/php複製那裏的函數,並且在函數爲'echo relativeTime(strtotime(「 - 1 hour」))之後再寫一行;'' – 2013-02-15 05:16:01