You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计算两个日期天数差时遇“非有效数值”错误求助

解决PHP中计算日期差时的"A non well formed numeric value encountered"错误

你遇到的问题很典型——直接对date()返回的字符串格式日期做减法运算,PHP没法把这些字符串当成有效数值来处理,所以抛出了这个错误。

正确的解决方案:使用PHP的DateTime类(推荐)

DateTime是PHP处理日期时间的标准类,不仅能避免字符串转数值的问题,还能处理各种复杂的日期场景,代码可读性也更高。试试下面的代码:

// 把两个日期转换为DateTime对象
$dateObj1 = new DateTime($date);
$dateObj2 = new DateTime($check->date);

// 计算日期差
$interval = $dateObj1->diff($dateObj2);

// 获取天数差(正数或负数,取决于哪个日期更早)
$diffDays = $interval->days;

// 输出结果
dd($diffDays);

为什么原来的代码不行?

你原来的代码里,date('Y-m-d', ...)返回的是类似"2024-05-20"的字符串,当你尝试用$date2 - $date1时,PHP会尝试把这些字符串转换成数值,但这种格式的字符串无法被解析为有效的数字,所以就触发了那个错误。

另一种方法:转成时间戳相减(兼容旧版本PHP)

如果你需要兼容PHP 5.2及更早版本(虽然现在很少见了),可以用strtotime把日期转成Unix时间戳(从1970年1月1日到该日期的秒数),再计算差值后转成天:

$timestamp1 = strtotime($date);
$timestamp2 = strtotime($check->date);

// 计算秒数差,再除以一天的秒数(86400)得到天数
$diffDays = abs(($timestamp2 - $timestamp1) / 86400);

dd($diffDays);

注意:这种方法要确保strtotime能正确解析你的日期格式,如果日期格式比较特殊,可能会解析失败,还是推荐用DateTime类更稳妥。

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

火山引擎 最新活动