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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:21