ACF 4.4.12.1+WordPress:Repeater字段日期加一年报错求助
解决ACF Repeater日期字段加一年显示的问题
首先,咱们来拆解你代码里的几个核心问题,这也是导致你得到01-01-1971(Unix纪元起始日期)的原因:
问题1:错误使用the_sub_field()获取值
the_sub_field('first-date')是直接输出字段内容的函数,它不会返回值给变量$date_debut,所以你的$date_debut实际上是空的,后续基于它的计算自然会出错。应该改用get_sub_field(),这个函数会返回字段值,不会直接输出。
问题2:mktime()参数顺序错误
mktime()的参数顺序是:mktime(小时, 分钟, 秒, 月份, 日期, 年份),你把日期、月份、年份的顺序搞反了,这会导致时间戳计算完全错误。
问题3:废弃函数split()的使用
split()已经在PHP中被废弃,建议使用explode()来分割日期字符串。
问题4:365天计算忽略闰年
直接加365天会遇到闰年的问题(比如2024年2月29日加365天应该是2025年2月28日,但按365天算会变成3月1日),用strtotime()直接处理"加一年"会更准确、简洁。
修正后的代码方案
这里提供两种方案,推荐第二种更简洁的方式:
方案1:修复原代码的问题
<?php // 用get_sub_field获取日期值,不直接输出 $date_debut = get_sub_field('first-date'); // 输出原日期 echo $date_debut; if ($date_debut) { // 用explode分割日期(替代废弃的split) $tmp = explode('-', $date_debut); $annee = $tmp[0]; $mois = $tmp[1]; $jour = $tmp[2]; // 修正mktime的参数顺序:时、分、秒、月、日、年 $date_expiration = mktime(0, 0, 0, $mois, $jour, $annee) + (24 * 3600 * 365); echo '<br />' . date("d-m-Y", $date_expiration); } ?>
方案2:用strtotime简化实现(推荐)
strtotime可以直接解析日期字符串并执行相对时间计算,代码更简洁且能处理闰年:
<?php $date_debut = get_sub_field('first-date'); // 输出原日期 echo $date_debut; if ($date_debut) { // 直接计算一年后的日期,strtotime自动处理闰年 $date_expiration = strtotime($date_debut . ' +1 year'); echo '<br />' . date("d-m-Y", $date_expiration); } ?>
内容的提问来源于stack exchange,提问作者titia2478
相关产品推荐
相关产品推荐

