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

PHP中日期时间比较运算符>=无法匹配当日日期的问题

解决当日及未来活动显示的时间比较问题

看起来你遇到了时间戳比较的常见坑——咱们来理清楚问题出在哪,然后搞定它!

问题根源

你原来的代码里,strtotime($dateFrom)如果是类似YYYY-MM-DD的纯日期格式,会被解析为当天00:00:00的时间戳;而time()返回的是当前精确到秒的时间戳(比如当天下午2点的话,数值会远大于当天0点的时间戳)。

所以当你用strtotime($dateFrom) >= time()时,只有那些日期在明天及以后的活动才会被选中——当天的活动因为0点的时间戳小于当前时间,直接被过滤掉了。而改成<=时,当天0点的时间戳自然小于等于当前时间,所以会包含当天和更早的活动,这就出现了你看到的反向结果。

解决方案

我们需要把当前时间的基准统一到当日0点,这样就能正确筛选出当日及未来的活动了,这里有两种靠谱的写法:

写法1:用当日0点的时间戳比较

public function getInspirationsMeetingIds() { 
    $ids = []; 
    if (($inspirationMeetings = $this->getCustomField('meetings'))) { 
        // 获取当日00:00:00的时间戳
        $todayStart = strtotime('today');
        foreach ($inspirationMeetings as $meeting) { 
            $row = new Inspiration($meeting['meeting']); 
            $dateFrom = $row->getCustomField('date'); 
            // 用当日0点的时间戳作为比较基准
            if (strtotime($dateFrom) >= $todayStart) { 
                $ids[] = $row->getId(); 
            } 
        } 
    } 
    return $ids; 
}

写法2:直接比较日期字符串(更直观)

如果你的dateFrom是标准的日期格式(比如YYYY-MM-DD),也可以直接转成日期字符串来比较,完全避开时分秒的干扰:

public function getInspirationsMeetingIds() { 
    $ids = []; 
    if (($inspirationMeetings = $this->getCustomField('meetings'))) { 
        $currentDate = date('Y-m-d');
        foreach ($inspirationMeetings as $meeting) { 
            $row = new Inspiration($meeting['meeting']); 
            $dateFrom = $row->getCustomField('date'); 
            // 转成统一格式的日期字符串后比较
            if (date('Y-m-d', strtotime($dateFrom)) >= $currentDate) { 
                $ids[] = $row->getId(); 
            } 
        } 
    } 
    return $ids; 
}

这两种写法都能帮你正确筛选出当日及之后举办的活动,选哪种取决于你的代码习惯~

内容的提问来源于stack exchange,提问作者Jon Steinar Björgvinsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:54:48