2017-08-11 9 views
0

Ich hatte eine funktionierende Funktion, um Zeitstempel in vor zu konvertieren. (Ex: vor 2 Minuten) Heute werden die Ergebnisse jedoch plötzlich geändert. Wenn ich versuche, diesen Zeitstempel zu konvertieren 1502442048 bekomme ich dieses Ergebnis -978327747 Sekunden.PHP - Zeitstempel in seltsames Ergebnis umwandeln

Das erste, was mir in den Sinn kam, ist, dass der Serveradministrator die Zeitzone des Servers ändern konnte. Also habe ich versucht, diese für Zeitzone Einstellung nach oben hinzufügen

date_default_timezone_set('Asia/Bangkok');

hat sich jedoch nichts geändert. Die Funktion hat vorher gut funktioniert. Was könnte der Grund sein, die Funktion falsch zu machen?

Hier ist meine vor Funktion

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

Was ist Ihre Eingabe? – Andreas

+0

Echo vor ("1502442048"); – user198989

+1

Es ist das ternäre, dass das Problem erstellt https://3v4l.org/IDkgX – Andreas

Antwort

2

ich Ihre ternären ändern würde is_numeric() zu verwenden:

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

Um zu überprüfen, ob die angegebene Zeit ein Zeitstempel Unix ist, wenn nicht, wandelt es in ein .

+1

Fixed. Vielen Dank... – user198989

1

Die einzige Sache, die Sie wirklich tun müssen, ist, bool das ternäre zu werfen.

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

Also hier wird strtotime entweder wahr oder falsch sein und (I vertauscht, um von true/false) strtotime wenn es falsch ist.