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

PHP中直接相减日期计算年龄触发非数值警告的解决方法

报错原因

date("Y-m-d")生成的当前日期、$_POST接收到的出生日期都是YYYY-MM-DD格式的字符串(例如2024-05-20),这类带横杠分隔的字符串不属于合法数值类型,PHP在执行减法运算时无法将其转换为有效数值,就会抛出"A non-numeric value encountered"警告,且直接相减得到的结果完全不符合年龄计算逻辑。

修复方案

使用PHP内置的DateTime类做日期差值计算,能自动处理日期格式解析、生日未到的年龄计算边界问题,运行时不会触发警告,代码如下:

// 接收用户传入的出生日期,先做合法性校验避免非法输入导致后续报错
$bday = $_POST['bday'];
$birthObj = DateTime::createFromFormat('Y-m-d', $bday);
if (!$birthObj) {
    // 可替换为自身业务对应的错误提示逻辑
    exit("出生日期格式不合法,请传入YYYY-MM-DD格式的日期");
}
$todayObj = new DateTime();
$dateDiff = $todayObj->diff($birthObj);
$myage = $dateDiff->y; // 该值为两个日期之间的完整整年差,即为计算得到的准确年龄
常见踩坑点
  • 直接对YYYY-MM-DD格式的字符串做加减等算术运算,不仅会触发非数值类型警告,运算结果完全不具备日期计算意义
  • 手动拆分字符串取年份值直接相减,会忽略月份、日期维度的差值,遇到当年生日还未到的场景,会把年龄多算1岁,DateTime::diff()方法会自动处理这类边界问题,计算结果更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:45:39