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

WordPress中自定义格式ACF日期字段无法比较及报错原因查询

报错原因分析

该报错的核心是DateTime::createFromFormat()方法解析日期失败时会返回布尔值false,此时对布尔值调用成员方法format()自然会抛出错误。常见的解析失败原因分为三类:

  • ACF字段返回值为空:对应文章未填写start_date字段,get_field()返回空字符串,无法匹配日期格式
  • 格式参数不匹配:你代码中传入的格式j F, Y和ACF日期字段实际设置的返回格式不完全一致,比如逗号缺失、空格数量不对
  • 月份本地化冲突:如果你的WordPress站点设置了非英语的本地化语言,ACF返回的月份会被翻译为对应语言(比如中文站点返回20 九月, 2021,而createFromFormat()默认仅支持英文月份字符串解析,直接解析就会失败)。
解决方案

1. 优先使用ACF原始存储值解析(最稳妥)

ACF日期字段在数据库中默认存储Ymd格式(例如20210920)的原始值,不受本地化影响,你可以通过第三个参数关闭格式化返回,直接拿到原始值解析:

// 第三个参数设为false,直接获取数据库存储的原始日期值
$start_date_raw = get_field('start_date', false, false);
$end_date_raw = get_field('end_date', false, false);

$start_date = new DateTime($start_date_raw);
$end_date = new DateTime($end_date_raw);

2. 增加容错判断

无论用哪种解析方式,都需要先判断解析是否成功,避免触发报错:

$start_date = DateTime::createFromFormat('j F, Y', get_field('start_date'));
$end_date = DateTime::createFromFormat('j F, Y', get_field('end_date'));

if ($start_date && $end_date) {
    // 计算日期差
    $diff = $start_date->diff($end_date);
    // 输出相差天数
    echo '相差'.$diff->days.'天';
    // 也可以按原格式输出
    echo $start_date->format('j F, Y');
} else {
    // 异常处理逻辑
    echo '日期参数无效';
}

3. 排查实际返回值

如果要继续用原返回格式解析,可以先打印字段实际返回内容确认格式是否正确:

var_dump(get_field('start_date'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:15:03