首页 > 解决方案 > string & int 在 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) }

标签: phpstrtotime

解决方案


不是让用户输入“60*60*24*7”,用户就不能输入“1周”吗?

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

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

推荐阅读