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
相关产品推荐
相关产品推荐

