2013-02-15 31 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