You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:15:31