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

Laravel Eloquent 查询start_date与end_date区间内数据无效问题求解

错误原因
  • 核心问题是你直接对d.m.Y格式的字符串执行大小比较,字符串的字典排序规则和日期的时间先后逻辑完全不匹配。比如字符串层面01.12.2024会小于10.01.2024,但实际日期12月1日远晚于1月10日,比较结果完全错误。
  • 额外如果你的数据库中start_date、end_date字段本身是date/datetime类型,你传入d.m.Y格式的字符串数据库无法正确解析为日期,也会导致比较逻辑失效。
解决方案

情况1:数据库字段为日期类型(date/datetime)

直接传入标准Y-m-d格式的日期做比较即可,Laravel中可以直接用now()辅助函数生成当前日期:

$infos = Info::select('*')
          ->where('start_date', '<=', now()->toDateString())
          ->where('end_date', '>=', now()->toDateString())
          ->get();

情况2:数据库字段存储的就是d.m.Y格式的字符串

需要先把字符串字段转为日期类型再做比较,以MySQL为例可以用STR_TO_DATE函数处理:

$currentDate = date('Y-m-d');
$infos = Info::select('*')
          ->whereRaw('STR_TO_DATE(start_date, "%d.%m.%Y") <= ?', [$currentDate])
          ->whereRaw('STR_TO_DATE(end_date, "%d.%m.%Y") >= ?', [$currentDate])
          ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:05