如何在账户创建超过30天时返回TRUE?
问题分析与修复方案
你的代码无法正常工作主要有两个核心问题,咱们一个个拆解:
1. 混淆了赋值与比较运算符
你代码里用的=是赋值运算符,它会把strtotime("+30 days", time())的结果直接赋值给$udata['joined'],而不是做相等判断。如果要比较两个值是否相等,应该用==(松散比较)或者===(严格比较)。
2. 逻辑完全搞反了
你的代码是在判断“账户创建时间等于30天后的时间”,这和你想要的“账户创建超过30天”完全相悖。正确的逻辑应该是:判断账户创建时间早于当前时间往前推30天的时间戳,或者当前时间与创建时间的差值大于30天对应的秒数。
修复后的代码示例
方案一:用时间戳差值判断(更直观)
// 计算30天对应的总秒数 $thirtyDaysInSeconds = 30 * 24 * 60 * 60; // 判断当前时间减去创建时间的差值是否超过30天 if (time() - $udata['joined'] > $thirtyDaysInSeconds) { return true; }
方案二:用strtotime生成对比时间
// 获取30天前的时间戳 $thirtyDaysAgo = strtotime("-30 days"); // 判断创建时间是否早于30天前 if ($udata['joined'] < $thirtyDaysAgo) { return true; }
另外提个小细节:PHP里关键字if的首字母不需要大写,虽然语法上不报错,但按照编码规范建议小写,可读性会更好。
内容的提问来源于stack exchange,提问作者Tolkien
相关产品推荐
相关产品推荐

