在这种情况下,$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) }
答案 0 :(得分:2)
不是输入用户“ 60 * 60 * 24 * 7”,而是输入“ 1周”吗?
如果是,则使用strtotime来计算时间是一种比eval更安全的方法。
echo strtotime("1 week")-time();
// Same as 60*60*24*7
答案 1 :(得分:1)
很显然,您不能将数学方程式放在字符串中,但是如果出于某种原因使它们以字符串格式出现,并且您可以确定它们始终是这种格式,则可以对其进行解析。.
f.e .:
$interval = array_product(explode('*',"60 * 60 * 24 * 7"));
答案 2 :(得分:1)
为什么不使用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天间隔进行比较。
很容易,嗯?