我正在制作一个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)){}
首先我无法通过第二个条件,但现在甚至我的页面都无法正常工作。
答案 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.";
}