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
相关产品推荐
相关产品推荐

