2017-08-11 65 views
0

我有一個工作函數將時間戳轉換爲前。 (例如:2分鐘前) 但是,今天的結果突然改變了。當我嘗試轉換此時間戳1502442048我得到此結果-978327747秒前。PHP - 將時間戳轉換爲前一個奇怪的結果

我首先想到的是服務器管理員可以改變服務器的時區。於是,我就這樣加入到頂部設置時區

date_default_timezone_set('Asia/Bangkok');

然而,一切都沒有改變。該功能以前工作正常。什麼可能是使功能不正確的原因?

這裏是我以前的功能

function ago($time_ago) { 
$time_ago = strtotime($time_ago) ? strtotime($time_ago) : $time_ago; 
$time = time() - $time_ago; 
switch($time): 
case $time <= 60; 
return ($time == 1) ? '1 second ago' : $time.' seconds ago'; 
case $time >= 60 && $time < 3600; 
return (round($time/60) == 1) ? '1 minute ago' : round($time/60).' minutes ago'; 
case $time >= 3600 && $time < 86400; 
return (round($time/3600) == 1) ? '1 hour ago' : round($time/3600).' hours ago'; 
case $time >= 86400 && $time < 604800; 
return (round($time/86400) == 1) ? '1 day ago' : round($time/86400).' days ago'; 
case $time >= 604800 && $time < 2600640; 
return (round($time/604800) == 1) ? '1 week ago' : round($time/604800).' weeks ago'; 
case $time >= 2600640 && $time < 31207680; 
return (round($time/2600640) == 1) ? '1 month ago' : round($time/2600640).' months ago'; 
case $time >= 31207680; 
return (round($time/31207680) == 1) ? '1 year ago' : round($time/31207680).' years ago' ; 
endswitch; 
} 
+0

您的輸入是什麼? – Andreas

+0

echo ago(「1502442048」); – user198989

+1

這是造成問題的三元組https://3v4l.org/IDkgX – Andreas

回答

2

我會改變你的三元使用is_numeric()

$time_ago = is_numeric($time_ago) ? $time_ago : strtotime($time_ago); 

要檢查如果給定的時間是一個UNIX時間戳,如果沒有,將其轉換爲一個。

+1

已修復。謝謝... – user198989

1

你實際上唯一需要做的就是布爾投三元。

$time_ago = (bool)strtotime($time_ago) ? $time_ago : strtotime($time_ago); 

所以這裏strtotime將是真或假,並且(如果它是假的,我換成true/false的順序)strtotime。