Laravel查询中如何将分钟转毫秒并添加Where条件筛选?
问题分析与修正
你的查询逻辑存在明显错误:第一个where条件把**分钟数类型的event_start_waiting_time和毫秒级时间戳$currentTimestamp**直接比较,两个值单位完全不匹配,导致筛选逻辑失效,返回空结果。
正确的筛选逻辑应该是:当前时间必须处于活动的可开始时间范围内——即当前时间 ≥ 活动开始时间(event_time),且当前时间 ≤ 活动开始时间 + 等待时长(转成毫秒)。
修正后的代码
$currentTimestamp = time() * 1000; $activities = Activity::where('event_time', '<=', $currentTimestamp) ->whereRaw('(event_time + (event_start_waiting_time * 60 * 1000)) >= ?', [$currentTimestamp]) ->get();
逻辑说明
- 第一个条件
where('event_time', '<=', $currentTimestamp):确保当前时间已经过了活动的开始时间(符合“下午5:00开始”的起始要求) - 第二个
whereRaw条件:计算活动的最晚可开始时间(event_time + 等待分钟数转毫秒),确保当前时间还没超过这个最晚时间(符合“到5:30之间”的结束要求)
验证示例
假设当前时间对应的毫秒时间戳是1685945141000(处于running活动的event_time1685944961000加上30分钟的时间范围内),修正后的查询会正确返回running活动。
内容的提问来源于stack exchange,提问作者Shiffali
相关产品推荐
相关产品推荐

