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

PHP中'j F Y'格式日期比较失效,寻求解决方向

嘿,这个问题我之前也碰到过!核心问题在于你现在是在比较格式化后的日期字符串,而不是真正的日期时间值——字符串的比较逻辑和日期的时间先后逻辑完全不一样,这就是筛选失效的原因。

方案1:直接用ACF返回的原始日期格式(最简单)

ACF日期选择器默认返回的是YYYYMMDD格式的字符串(比如20241005),这种格式的字符串可以直接按字符顺序比较,结果和日期先后完全一致。你可以这么改:

// 获取ACF字段的原始日期值(替换成你的实际字段名)
$display_until_raw = get_field('display_until');
// 生成今天的YYYYMMDD格式字符串
$today_raw = date('Ymd');

if($today_raw < $display_until_raw) :
    // 执行目标逻辑
endif;

方案2:用DateTime对象(更灵活,适合复杂场景)

如果需要处理时区、时间部分或者更复杂的日期运算,推荐用PHP的DateTime对象来比较:

// 从ACF原始日期创建DateTime对象(默认YYYYMMDD格式,若你的字段返回格式不同,要修改第一个参数)
$display_until_date = DateTime::createFromFormat('Ymd', get_field('display_until'));
// 获取当前日期时间(可指定时区,比如new DateTime('now', new DateTimeZone('Asia/Shanghai')))
$today_date = new DateTime();

// 比较两个DateTime对象
if($today_date < $display_until_date) :
    // 执行目标逻辑
endif;

额外注意事项

  • 检查ACF字段的返回格式:在ACF字段设置里,确认"返回格式"是不是YYYYMMDD,如果你改成了j F Y这类格式,那createFromFormat的第一个参数要对应改成'j F Y'。
  • 考虑是否包含当天:如果display_until是当天时也需要展示事件,记得把比较运算符改成<=而不是<。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:22