2017-08-11 6 views
0

タイムスタンプを前に変換する機能がありました。 (例:2分前) しかし、今日の結果は突然変更されています。このタイムスタンプを変換しようとすると1502442048私はこの結果を得ています-978327747秒前です。PHP - 前回のタイムスタンプを奇妙な結果に変換する

私の頭に浮かんだ最初のことは、サーバー管理者がサーバーのタイムゾーンを変更できる可能性があることです。だから私は、タイムゾーン

date_default_timezone_set('Asia/Bangkok');

を設定するためのトップにこれを追加しようとしましたが、何も変わっていません。この関数は以前はうまく機能していました。機能を正しくないものにする理由は何でしょうか? 1に変換し、

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

与えられた時間はUNIXタイムスタンプである、ないにかどうかを確認するには:ここで

は私の前に機能

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

エコー前( "1502442048"); – user198989

+1

問題を作成するのは三者です。https://3v4l.org/IDkgX – Andreas

答えて

1

あなたが実際にやらなければならないことは、三元をブールキャストすることだけです。

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

だからここのstrtotimeはそれが偽だ場合のstrtotime(私は真/偽の順番を入れ替え)真または偽のいずれかとなります。