If Statement中的错误逻辑?

时间:2009-08-05 23:19:24

标签: php mysql date time if-statement

$ 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;

为什么这回归janice(14461天)而不是janice(15分钟前)

日期时间函数表在我的表中有DATETIME类型,因此它返回日期的完整字符串。

2 个答案:

答案 0 :(得分:1)

我的猜测是strtotime()返回false。

今天考虑的是距离unix时代14461天。

您可以使用SQL语句获取UNIX_TIMESTAMP(datetime)作为时间戳,并从PHP代码中取出该数学。

此外 - 您在计算阵列之前计算$interval。尝试将整段代码转换为一个带有时间戳并返回“interval”

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

答案 1 :(得分:1)

时间计算代码应该进入while循环,因为你想在每个记录的基础上计算时间(它指的是$ fetch_array,它仅作为while循环的一部分被检索)