在PHP中比较DateTime的对象是行不通的

时间:2018-03-18 07:08:59

标签: php api datetime time web-development-server

我正在制作一个API,我需要检查特定用户的令牌有效性,并且我正在使用php的DateTime函数。我在登录时保存令牌和当前时间,我希望令牌有效10分钟,所以当用户在登录后的前10分钟内发出请求时,我想更新令牌的时间有效性。

$currentTime = new DateTime();
$curTime = $currentTime->format("Y-m-d H:i:s");
$time10MinutesAgo = new DateTime("10 minutes ago");
$time10Minutes = $time10MinutesAgo->format("Y-m-d H:i:s");
$token_time = $query1_r['token_time']; // value is stored in the db(mysql)
if (($curTime > $token_time) && ($token_time >= $time10Minutes)){}

首先我无法通过第二个条件,但现在甚至我的页面都无法正常工作。

2 个答案:

答案 0 :(得分:2)

使用纪元时间值进行时间比较,比较数字而不是日期会更容易。

$currentTime = time();
$time10MinutesAgo = strtotime('-10 minutes');
$token_time = strtotime($query1_r['token_time']); // value is stored in the db(mysql)
if(($currentTime >$token_time) && ($token_time >= $time10MinutesAgo )){}

答案 1 :(得分:1)

如果您已经拥有DateTime对象,请不要将它们转换为字符串,只需比较彼此之间的对象,如下所示:

$currentTime = new DateTime();
$time10MinutesAgo = new DateTime("10 minutes ago");
$tokenTime = new DateTime($query1_r['token_time']);

if ($time10MinutesAgo <= $tokenTime && $tokenTime <= $currentTime) {
    echo "Token time is between now and now-10 minutes.";
}

demo