【问题标题】:MYSQL's Timestampdiff not working with PHP's if/else bigger than >MYSQL Timestampdiff 不适用于 PHP if/else 大于 >
【发布时间】:2015-07-25 20:13:04
【问题描述】:

Timestampdiff

的以下Mysql SELECT部分
$result_all = mysql_query("SELECT *, TIMESTAMPDIFF(MINUTE,aktualisiert,NOW()) AS quote_diff FROM sms WHERE gesendet ='1' AND DATE_FORMAT( aktualisiert,  '%Y' ) = '2015' AND trash ='0' ORDER BY aktualisiert DESC");

似乎不适用于 if else PHP 代码

<?php
$qd = $row['quote_diff'];
$qdint = intval($qd);
$zahl = intval(100);

echo $qdint;

if ( $qdint > $zahl) {echo " minutes"; }
else { echo " minute"; }

var_dump($qdint); //int(91)
var_dump($zahl); //int(100)
?>

还有var_dump说,两者都有整数。

但是为什么大于>(或者小于

【问题讨论】:

  • 所以脚本回显 minutes 而不是 minute 还是什么?
  • 91 不大于 100,因此不会进入 if 分支。你应该得到“91分钟”。一旦数据库中的值大于 100(例如 240),您就会得到“240 分钟”。我真的不知道这背后的逻辑是什么......
  • @u_mulder 是的,完全正确。如果我看到对“大于”的任何反应,则整数 1 应输出“分钟”,所有其他整数应输出分钟。
  • @GolezTrol 我的数据库中有很多输出。有些大于 100,有些小于 100。但输出只是“分钟”。为什么?
  • 你确定?您给出的示例是 91,我不知道为什么较大的值不会导致“分钟”。然而,逻辑似乎有缺陷。在我看来$qdint &gt; $zahl 应该是$qdint != 1

标签: php mysql timestamp


【解决方案1】:

找到了一个可行的解决方案,没有 Timestampdiff:

$result_all = mysql_query("SELECT * FROM sms WHERE gesendet ='1' AND DATE_FORMAT( aktualisiert,  '%Y' ) = '2015' AND trash ='0' ORDER BY aktualisiert DESC");

(因为一个已知问题dev.mysql.com...12.7...user comment from April 9 2004

<?php  $now = time();
       $lastLogin = strtotime($row['aktualisiert']);
       $diff = $now - $lastLogin;
       $now = date('YmdHis',$now);

       $diffecho = idate('i',$diff);

       if($diff > 59 && $diff < 119) { // 3600 seconds is 1 hour
       echo $diffecho." minute ago"; }
       else { echo $diffecho." minutes ago"; }
?>

如果您不想要前导零,请使用 PHP 函数 idate。

developphp.com 上还有另一种很酷的方法: Convert MySQL Timestamp to Ago Time Format OOP Tutorial

也许我以后会用这个。

谢谢

【讨论】:

    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 2014-08-28
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多