2012-03-08 82 views
-3

可能重复:
PHP: producing relative date/time from timestampsPHP我如何计算相对时间?

给出一个具体的日期时间值,如何显示相对时间像

  • 36分钟前
  • 3小时前
  • 3天前
  • 1个月前

etc等等?

mysql_query("UPDATE users SET lastlogin = ".time()." WHERE id = ".$userID); 
+1

它只是一个例子。感谢寿。 – 2012-03-08 15:10:23

+3

@JackManey我不认为你可以告诉别人他们的代码很容易受到SQL注入的影响,当你不知道他们如何获得变量。 – jprofitt 2012-03-08 15:12:45

+1

感谢您的关注,但它只是一个例子,我将如何将它添加到DB – 2012-03-08 15:13:40

回答

0

strtotime是一个不错的功能

让我更具体

strtotime(-5 days); 

strtotime(-1 month); 

有一个可选的第二个参数是时间另一个时间戳你想开始,给你的relative时间。为什么downvote?

0
<?php 
function relativeTime($time = false, $limit = 86400, $format = 'g:i A M jS') { 
    if (empty($time) || (!is_string($time) &amp;&amp; !is_numeric($time))) $time = time(); 
    elseif (is_string($time)) $time = strtotime($time); 

    $now = time(); 
    $relative = ''; 

    if ($time === $now) $relative = 'now'; 
    elseif ($time > $now) $relative = 'in the future'; 
    else { 
     $diff = $now - $time; 

     if ($diff >= $limit) $relative = date($format, $time); 
     elseif ($diff < 60) { 
      $relative = 'less than one minute ago'; 
     } elseif (($minutes = ceil($diff/60)) < 60) { 
      $relative = $minutes.' minute'.(((int)$minutes === 1) ? '' : 's').' ago'; 
     } else { 
      $hours = ceil($diff/3600); 
      $relative = 'about '.$hours.' hour'.(((int)$hours === 1) ? '' : 's').' ago'; 
     } 
    } 

    return $relative; 
} 
?> 

Source

+0

我可以看到这个打印的例子吗? – 2012-03-08 15:16:18

+0

它会打印出“现在”,“不到一分钟前”,“约4秒前”或“约41小时前”等内容。虽然没有几年或几个月,但这是一个很好的起点。 – 2012-03-08 15:18:02

+0

谢谢,我将能够解决其余几个月和几年。这是什么时候进来的? '在将来' – 2012-03-08 15:20:29

1

这可能会帮助你

function time_ago_en($time) 
    { 
     if(!is_numeric($time)) 
      $time = strtotime($time); 

     $periods = array("second", "minute", "hour", "day", "week", "month", "year", "age"); 
     $lengths = array("60","60","24","7","4.35","12","100"); 

     $now = time(); 

     $difference = $now - $time; 
     if ($difference <= 10 && $difference >= 0) 
      return $tense = 'just now'; 
     elseif($difference > 0) 
      $tense = 'ago'; 
     elseif($difference < 0) 
      $tense = 'later'; 

     for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { 
      $difference /= $lengths[$j]; 
     } 

     $difference = round($difference); 

     $period = $periods[$j] . ($difference >1 ? 's' :''); 
     return "{$difference} {$period} {$tense} "; 
    } 

<?php 

echp time_ago_en(time() - 300); 
// 5 minutes ago 
?>