2013-02-15 1 views
0

может кто-нибудь помочь пожалуйста. У меня есть этот скрипт, который преобразует timestamp mysql с ужасной стандартной даты и ставит его в удобной для пользователя форме «около 2 секунд назад или около 1 часа назад».показать время с mysql, как только будет опубликовано содержание?

мой вопрос в этом. он отлично работает, когда пользователь публикует контент, самый последний контент, который они публикуют в echos из «около 0 назад», не давая времени, когда он был отправлен, и это не так, пока они не отправят что-то еще после этого, что они видят время на одном они размещали до этого.

так им интересно, почему это происходит из-за того, что я не могу понять это, я предпочитаю, чтобы он сказал «добавлен только сейчас», как только пользователи разместили его, а затем продолжайте, когда скрипт говорит, добавив 20 секунд назад, 2 мин. Назад и т. Д.

пример;

(содержание 1) "писал о 0 назад" (содержание 2) "отправил около 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

я попробовал ваш код, но он приходит с фатальной ошибкой, не может переобъявить относительное время –

+2

изменить название функции 'relativeTime' на другой, который вы' никогда used', так как это ошибка возникает, когда 'две функции' имеют одно имя. Для демонстрации вы можете попробовать на http://writecodeonline.com/php скопировать туда функцию и написать еще одну строку после функции «echo relativeTime (strtotime (« - 1 час »)); –

Смежные вопросы