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

