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

PHP结合Twig比较活动日期与当日的代码问题排查

问题原因

你的代码存在3个核心问题,导致日期判断逻辑失效:

  • todays_date()函数没有返回值:函数内只赋值了$date_now = time(),没有用return返回结果,Twig调用该函数时拿不到有效的当前时间值。
  • 日期比较逻辑错误:你在Twig中先把时间戳格式化为M d格式的字符串(类似Jan 05、Dec 12)再做大小比较,字符串是按逐字符ASCII码顺序对比,完全不符合日期先后的判断规则,跨月、跨年场景下会直接返回错误的比较结果。
  • 时间比较精度问题:直接用time()取当前带时分秒的时间戳,和不带时分秒的活动开始时间比较时,会出现当天的活动因为当前时间已过当天0点,被误判为已过期的问题。
修正方案

1. 修正PHP函数代码

// 移除无用的$date参数,返回当日0点的Unix时间戳,和活动日期精度对齐
function todays_date()
{
    return strtotime(date('Y-m-d'));
}

function event_start_date($id)
{
    $startDate = strtotime(get_field('event_start_date', $id));
    // 统一转为活动当日0点时间戳,避免时分秒影响比较结果,去掉冗余的date('U')转换
    return strtotime(date('Y-m-d', $startDate));
}

2. 修正Twig模板逻辑

比较阶段必须使用原始Unix时间戳做大小判断,确认需要展示时再格式化日期字符串:

{# 先获取原始时间戳,不提前格式化 #}
{% set event_ts = function('event_start_date', item.id) %}
{% set today_ts = function('todays_date') %}

{% if event_ts < today_ts %}
    <p>无活动</p>
{% else %}
    {# 输出阶段再格式化日期为需要的格式 #}
    <p class="date">{{ event_ts|date('M d') }}</p>
{% endif %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:51:19