Eğer Beyanında yanlış mantık?

2 Cevap php

$ Repeat_times = mysql_real_escape_string ($ repeat_times);

$result = mysql_query("SELECT `code`,`datetime` FROM `fc` ORDER by datetime desc LIMIT 25") or die(mysql_error());

$output .="";
$seconds = time() - strtotime($fetch_array["datetime"]);

if($seconds < 60)
  $interval = "$seconds seconds";
else
 if($seconds < 3600)
     $interval = floor($seconds / 60) . " minutes";
else
    if($seconds < 86400)
         $interval = floor($seconds / 3600) . " hours";
    else
         $interval = floor($seconds / 86400) . " days";

while ($fetch_array = mysql_fetch_array($result)) {

	$fetch_array["code"] = htmlentities($fetch_array["code"]);
	$output .= "<li><a href=\"http://www.***.com/code=" . htmlspecialchars(urlencode($fetch_array["code"])) . "\" target=\"_blank\">" . htmlspecialchars($fetch_array["code"]) . "</a> (" . $interval . ") ago.</li>";

}

$output .="";

return $output;

Neden bu (15 dakika önce) yerine Janice (14.461 gün) Janice dönüyor

Bu tarih için tam bir dize döndüren o nedenle datetime fonksiyon tablosu benim tabloda DATETIME türü vardır.

2 Cevap

Benim tahminim strtotime () false dönen olurdu.

Bugün dikkate unix çağdan 14461 gündür.

Sen damgası olarak (datetime) UNIX_TIMESTAMP alıp php kodu dışında bu matematik almak için SQL deyimini kullanabilirsiniz.

Ayrıca - Sen $interval bir dizi fecthing önce hesaplanmasında vardır. Bir zaman damgası alır ve "aralığı" döndüren bir işlev içine o kod bütün bölüm yapmayı deneyin

function get_interval($time) {
  $diff = time() - $time;
  // .... calculate interval here
  return $interval
}

Eğer (bu sadece while döngüsünün bir parçası olarak alınacağı $ fetch_array, atıfta bulunuyor ki ve) bir başına rekor bazında süreyi hesaplamak istiyor beri zamanı hesaplama kodu, döngü içindeyken gitmeli