2012-03-08 81 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 
?>