2015-12-19 23 views
0
function time2str($ts) 
{ 
    if(!ctype_digit($ts)) 
     $ts = strtotime($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); 
    } 
} 

我使用此代碼,一切正常,但是如果日期是(例如)PHP計時天計數是錯誤

now 2015-12-19 04:22

post time 2015-12-18 23:59

它顯示昨天不但是,6小時前,我該如何解決這個問題?謝謝

+1

手工計算。在你顯示的那兩次之間,有15,780秒。根據代碼中的邏輯,它應該在4小時前完成輸出。由於您計算「昨天」是24小時前的完整時間,因此無需將您的代碼中的邏輯更改爲可區分實際「天數」的內容即可獲得所要求的結果。 – Jon

+0

加入@Jon評論。以15,780秒的差距,將它推到'$ day_diff = floor($ diff/86400);'將返回'0'(零)。這就是爲什麼你得到'if($ diff <86400)返回樓層($ diff/3600)。 '小時前';'(6小時前) – cwps

+0

感謝Jon的答覆,我應該仔細閱讀 –

回答