string & int 在 strtotime 中不能正常工作
string & int not working properly in strtotime
在这种情况下$interval
我给出的是整数意味着它工作正常return是真的,假设$interval
我给出的是字符串意味着不能正常工作return 错误。
scenario 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);
?>
Output
array(1) { ["passwordResetStatus"]=> bool(true) }
scenario 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);
?>
Output
array(1) { ["passwordResetStatus"]=> bool(false) }
My expected out
场景 2 也应该 return 为 array(1) { ["passwordResetStatus"]=> bool(true) }
显然你不能把数学方程放在字符串中,但是如果出于某种原因你得到了它们的字符串格式,并且你确定它们总是这样的格式,你可以解析它..
f.e.:
$interval = array_product(explode('*',"60 * 60 * 24 * 7"));
不是让用户输入“60*60*24*7”,用户不能输入“1周”吗?
如果是,比 eval 更安全的方法是使用 strtotime 来计算时间。
echo strtotime("1 week")-time();
// Same as 60*60*24*7
为什么不使用 PHP DateTime classes?这是一个简短的解决方案。
$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 class 获得了 diff
方法,该方法计算两个 DateTime 对象之间的差异。它 returns 一个 DateInterval
对象,其中包含差异。现在我们可以将计算出的差异与您的 7 天间隔进行比较。
很简单,嗯?
在这种情况下$interval
我给出的是整数意味着它工作正常return是真的,假设$interval
我给出的是字符串意味着不能正常工作return 错误。
scenario 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);
?>
Output
array(1) { ["passwordResetStatus"]=> bool(true) }
scenario 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);
?>
Output
array(1) { ["passwordResetStatus"]=> bool(false) }
My expected out
场景 2 也应该 return 为 array(1) { ["passwordResetStatus"]=> bool(true) }
显然你不能把数学方程放在字符串中,但是如果出于某种原因你得到了它们的字符串格式,并且你确定它们总是这样的格式,你可以解析它..
f.e.:
$interval = array_product(explode('*',"60 * 60 * 24 * 7"));
不是让用户输入“60*60*24*7”,用户不能输入“1周”吗?
如果是,比 eval 更安全的方法是使用 strtotime 来计算时间。
echo strtotime("1 week")-time();
// Same as 60*60*24*7
为什么不使用 PHP DateTime classes?这是一个简短的解决方案。
$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 class 获得了 diff
方法,该方法计算两个 DateTime 对象之间的差异。它 returns 一个 DateInterval
对象,其中包含差异。现在我们可以将计算出的差异与您的 7 天间隔进行比较。
很简单,嗯?