字符串和整数在 strtotime 中无法正常工作



在这种情况下,$interval我作为整数给出意味着它工作正常,返回true,假设$interval我作为字符串给出意味着工作不正常,返回false。

场景1

<?php
$restDate = "2018-11-21 11:58:55";
$difference = strtotime(date('Y-m-d H:i:s')) - strtotime($restDate);
$interval = 60 * 60 * 24 * 7;
if($difference <= $interval){
$data['passwordResetStatus'] = true;
}else{
$data['passwordResetStatus'] = false;
}
var_dump($data);
?>

输出

array(1) { ["passwordResetStatus"]=> bool(true) }

场景2

<?php
$restDate = "2018-11-21 11:58:55";
$difference = strtotime(date('Y-m-d H:i:s')) - strtotime($restDate);
$interval = "60 * 60 * 24 * 7"; // changes from here
if($difference <= $interval){
$data['passwordResetStatus'] = true;
}else{
$data['passwordResetStatus'] = false;
}
var_dump($data);
?>

输出

array(1) { ["passwordResetStatus"]=> bool(false) }

我的预期输出

场景2它也应该作为array(1) { ["passwordResetStatus"]=> bool(true) }返回

与其让用户输入"60*60*24*7",难道用户不能输入"1周"吗?

如果是,一种比eval更安全的方法是使用strtotime来计算时间。

echo strtotime("1 week")-time();
// Same as 60*60*24*7

显然,你不能把数学方程放在字符串中,但如果出于某种原因,你把它们放在字符串格式中,并且你确信它们总是这样的格式,你可以解析它

f.e.:

$interval = array_product(explode('*',"60 * 60 * 24 * 7"));

为什么不使用PHP DateTime类?这是一个简短的解决方案。

$today = new DateTime();
$rest = new DateTime('2018-11-21 11:58:55');
$interval = $rest->diff($today);
$passwordValid = $interval->format('%a') >= 7 ? false : true;

我在这里做了什么?首先我们需要今天的时间。在那之后,我们需要时间,用它来比较今天的时间。这两个时间都是DateTime实例。正因为如此,我们可以很容易地计算出两个时间之间的差异。DateTime类获得了diff方法,该方法计算两个DateTime对象之间的差。它返回一个DateInterval对象,该对象保存差异。现在我们可以将计算出的差异与您的7天间隔进行比较。

很容易,嗯?

相关内容

  • 没有找到相关文章

最新更新