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

CodeIgniter4(PHP8)传递null给date_create参数的弃用错误求助

解决日期差计算的null参数错误

错误提示Passing null to parameter #1 ($datetime) of type string is deprecated的核心原因是:你从数据库取到的$v['sipp_ed']是null,或者是date_create无法识别的无效日期格式,导致创建DateTime对象失败。

直接给你几个可行的解决步骤:

  • 先排查数据源真实性
    先输出看看字段值到底是什么:

    var_dump($v['sipp_ed']);
    

    如果输出是null,说明数据库里这条数据的sipp_ed字段是空的,得先处理数据缺失的情况(比如补全数据,或者代码里做空值兼容);如果有值但不是标准日期格式(比如2023/12/31而非2023-12-31),就得用指定格式解析。

  • 增加参数校验的兼容代码
    在创建日期对象前先做判断,避免传null或无效值进去:

    // 先判断字段非空且是有效日期
    if (!empty($v['sipp_ed']) && strtotime($v['sipp_ed']) !== false) {
        $date1 = date_create($v['sipp_ed']);
        $date2 = new DateTime();
        $diff = date_diff($date1, $date2);
        // 注意你原来的format里拼错了单词,是Difference不是Diiference
        echo "Difference is {$diff->format('%a')} days";
    } else {
        echo "日期数据无效或为空";
    }
    
  • 针对非标准日期格式的处理
    如果数据库里的日期格式是自定义的(比如dd/mm/yyyy),用DateTime::createFromFormat精准解析:

    if (!empty($v['sipp_ed'])) {
        // 这里的格式符要和数据库日期格式完全匹配,比如d/m/Y对应日/月/年
        $date1 = DateTime::createFromFormat('d/m/Y', $v['sipp_ed']);
        if ($date1) {
            $date2 = new DateTime();
            $diff = date_diff($date1, $date2);
            echo "Difference is {$diff->format('%a')} days";
        } else {
            echo "日期格式不匹配,请检查格式";
        }
    } else {
        echo "日期字段为空";
    }
    

另外提个小细节:你原来的format字符串里把Difference拼写成了Diiference,记得修正一下。

内容的提问来源于stack exchange,提问作者Darlina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:00:47