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

使用ACF日期字段计算年龄显示0岁的问题排查

问题:ACF日期字段计算年龄始终显示0

我尝试使用ACF日期字段,模仿维基百科的方式自动显示人物年龄(示例:17 mai 1990 (33 ans)),但代码运行后年龄始终显示“0”,代码如下:

<?php echo get_field( 'person-birthday', $post->ID ); ?> //display the date in 'j F Y' format.
<?php 
$date_string = get_field( 'person-birthday', $post->ID );  
$date = DateTime::createFromFormat( 'Ymd', $date_string );  
$birthday = new DateTime( $date );  
$interval = $birthday->diff( new DateTime );  
echo '(' .$interval->y.' ans)'; 
?>

问题根源

你的代码存在两个核心错误:

  • 日期格式不匹配:get_field('person-birthday')返回的是你设置的显示格式(j F Y,比如17 mai 1990),但你用DateTime::createFromFormat('Ymd', $date_string)去解析,格式完全不兼容,导致$date变成false,后续创建DateTime对象时出错,最终计算出的年龄为0。
  • 错误的DateTime实例化:即使$date是有效的DateTime对象,new DateTime($date)这种写法也不成立——DateTime构造函数不接受另一个DateTime对象作为参数。

修复后的代码

解决思路是先获取ACF存储的原始Ymd格式日期,再正确计算年龄:

<?php
// 获取显示用的格式化日期
$display_date = get_field('person-birthday', $post->ID);
echo $display_date;

// 获取ACF存储的原始Ymd格式日期(第三个参数传false跳过格式化)
$raw_date = get_field('person-birthday', $post->ID, false);

if ($raw_date) {
    $birthday = DateTime::createFromFormat('Ymd', $raw_date);
    $interval = $birthday->diff(new DateTime());
    echo ' (' . $interval->y . ' ans)';
}
?>

额外说明

  • 确保你的ACF日期字段设置中,“存储格式”保持默认的Ymd(无需修改),“返回格式”设为你需要的显示格式(比如j F Y)。
  • 增加if ($raw_date)判断,避免日期字段为空时触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:07