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

如何基于ACF自定义日期选择器字段实现日期范围差异化显示?

解决ACF日期字段按年份匹配输出自定义范围格式的问题

直接上可运行的实现代码,核心是把ACF返回的日期字符串转成DateTime对象,再按年份匹配输出对应格式:

<?php
// 获取ACF自定义字段值
$beginning_date = get_field('beginning_date');
$completion_date = get_field('completion_date');

// 先检查两个字段是否都有有效内容
if ($beginning_date && $completion_date) {
    // 按照ACF设置的返回格式(l, F j, Y)解析为DateTime对象
    $start_dt = DateTime::createFromFormat('l, F j, Y', $beginning_date);
    $end_dt = DateTime::createFromFormat('l, F j, Y', $completion_date);

    // 确保日期解析成功
    if ($start_dt && $end_dt) {
        // 对比年份,输出对应格式
        if ($start_dt->format('Y') === $end_dt->format('Y')) {
            // 年份相同时:日/月 - 日/月/年
            $range = $start_dt->format('j/m') . ' - ' . $end_dt->format('j/m/Y');
        } else {
            // 年份不同时:输出完整的两个日期(可根据需求调整格式)
            $range = $start_dt->format('l, F j, Y') . ' - ' . $end_dt->format('l, F j, Y');
        }

        // 输出最终结果
        echo $range;
    } else {
        echo '日期格式解析失败';
    }
} else {
    echo '请填写完整的开始和结束日期';
}
?>

关键细节说明:

  • DateTime::createFromFormat('l, F j, Y', $date_str):严格对应ACF设置的返回格式,确保字符串能正确转成可操作的日期对象
  • 年份对比用format('Y')获取四位年份字符串,避免数字类型转换的潜在问题
  • 输出格式里的j/m是不带前导零的日/月,要是需要带前导零(比如05/03),改成d/m即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:57