PHP 5.5.11日期差判断代码无法执行问题求助
问题分析与修复方案
核心错误点及修复:
$today变量类型错误
原代码$today= date();返回字符串类型,无法调用DateTime类的diff()方法。需改为创建DateTime对象:$today = new DateTime();DateTime::createFromFormat格式符无效
PHP日期格式符中,4位年份用Y、2位月份用m、2位日期用d,原代码的YYYYMMDD是错误格式,会导致$st_dt_eom创建失败。同时类名需大写DateTime,并移除多余分号:$st_dt_eom = DateTime::createFromFormat('Ymd', $st_dt);日期差值计算逻辑错误
$diff->format("%d")仅返回差值的“日”部分(跨月时无法得到总天数),应直接使用DateInterval的days属性获取总天数:$diffDays = $diff->days;跳转需终止脚本执行
自定义redirect()函数内必须包含exit()或die(),否则脚本会继续执行,导致跳转不生效。示例:function redirect($url) { header("Location: $url"); exit(); }
修复后的完整代码:
$today = new DateTime(); if ($_POST['Submit'] == 'SAVE') { // 转换表单日期为Ymd格式(替代自定义YYYYMMDD函数) $st_dt = str_replace('-', '', $_POST['st_dt']); // 创建DateTime对象并判断是否成功 $st_dt_eom = DateTime::createFromFormat('Ymd', $st_dt); if (!$st_dt_eom) { redirect("index.php"); exit(); } $st_dt_eom->modify('last day of this month'); $diff = $today->diff($st_dt_eom); $diffDays = $diff->days; if ($diffDays > 5) { redirect("index.php"); exit(); } }
内容的提问来源于stack exchange,提问作者Shryans Baid
相关产品推荐
相关产品推荐

