PHP中如何检查自定义日期是否距当前日期不超过13年?
解决方法
你不需要把DateTime对象转成字符串来比较,直接用DateTime实例做日期运算和对比会更可靠,能避免字符串格式带来的错误。下面是调整后的代码和逻辑:
完整代码示例
$usersday = (int)$_POST['day']; $usersyear = (int)$_POST['year']; $usersmonth = (int)$_POST['month']; // 创建用户提交的日期对象(保留DateTime类型,不要转成字符串) $userDate = date_create("$usersyear-$usersmonth-$usersday"); // 校验日期是否合法(避免用户输入无效日期,比如2月30日) if (!$userDate) { echo "无效的日期"; exit; } // 获取当前日期的DateTime对象 $currentDate = new DateTime(); // 计算当前日期往前推13年的日期 $thirteenYearsAgo = (new DateTime())->modify('-13 years'); // 比较:用户日期是否晚于或等于13年前的日期(即用户日期与当前日期的间隔≤13年) if ($userDate >= $thirteenYearsAgo) { echo "该日期比当前日期早13年或更短时间"; } else { echo "该日期早于当前日期13年以上"; }
关键说明
- 保留DateTime对象:不要把
$userDate转成字符串,DateTime支持直接使用>=/<=等比较运算符,比字符串对比更准确。 - 日期合法性校验:
date_create遇到无效日期会返回false,必须加校验避免后续逻辑出错。 - 自动处理边界情况:用
modify('-13 years')计算13年前的日期,会自动处理闰年、不同月份天数等特殊情况,不用手动计算年份。
内容的提问来源于stack exchange,提问作者OmerG
相关产品推荐
相关产品推荐

