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小時前,我該如何解決這個問題?謝謝
手工計算。在你顯示的那兩次之間,有15,780秒。根據代碼中的邏輯,它應該在4小時前完成輸出。由於您計算「昨天」是24小時前的完整時間,因此無需將您的代碼中的邏輯更改爲可區分實際「天數」的內容即可獲得所要求的結果。 – Jon
加入@Jon評論。以15,780秒的差距,將它推到'$ day_diff = floor($ diff/86400);'將返回'0'(零)。這就是爲什麼你得到'if($ diff <86400)返回樓層($ diff/3600)。 '小時前';'(6小時前) – cwps
感謝Jon的答覆,我應該仔細閱讀 –