【问题标题】:Comparing dates in PHP from database比较数据库中 PHP 中的日期
【发布时间】:2018-03-27 09:50:25
【问题描述】:

我正在为我的一个 PHP 小项目编写令牌认证系统。向脚本发出请求,然后生成令牌并将其存储到数据库中,当前时间的到期日期为 +2 分钟。

然后有另一个脚本在其请求中获取令牌,检查它是否有效并且令牌没有过期。这就是我卡住的地方。我无法成功比较这两个日期,即使条件应该为真,但事实并非如此。

这是我将时间插入数据库的方法;

// Now, we want to gen the token.
$token = randomKey(20);

// Current time + 2 minutes
$time = date("m/d/Y h:i:sa", time() + 120);

// Insert the token into the DB
$obj->query("INSERT INTO `tokens`(`username`, `token`, `expiry`) VALUES ('$uid', '$token', '$time')");

这是我尝试比较它们的方法;

if(strtotime($row['expiry']) < strtotime(date("m/d/Y h:i:sa")))

无论如何,即使将 db 中的时间更改为过去一天,此条件的计算结果始终为 false。

【问题讨论】:

  • 它以何种格式存储在您的数据库中?最后的a 让我很困惑,MySQL 日期通常以 24 小时格式存储。
  • 如果您在表字段中输入 DATETIME,那么为了比较日期,您需要更改数据库字段的格式
  • @ThomasEdwards 他们被存储为 VARCHARS
  • var_dump($row['expiry']); 的输出是什么?
  • 考虑将它们作为日期存储在 MySQL 中,以便它们以日期格式到达,而不是再次转换它们。

标签: php sql date


【解决方案1】:

它是错误的,因为它是一个格式不正确的数字。

试试 echo date("m/d/Y h:i", date("m/d/Y h:i:sa", time());

你会得到一个错误。

为什么不使用 unix 时间戳来插入数据库和稍后读取?轻松多了。

$time = date("U") + 120;

// Do DB insert....

if($row['expiry'] < date("U")){
    // Do something...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2020-10-09
    • 2011-03-26
    • 2012-02-08
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多