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

Laravel月度数据统计异常:2月1日本月记录数显示180而非0

问题原因与解决方案

你的代码逻辑存在偏差:now()->subDays(30)是统计过去30天的数据,而非当月数据。2月1日时,过去30天包含1月的全部记录,所以会统计到180条1月的IncidentReport,和预期的当月数据不符。

正确的统计写法

方法1:精准匹配当前年份与月份

Card::make('Incidents this month', IncidentReport::whereMonth('created_at', now()->month)
    ->whereYear('created_at', now()->year)
    ->count()),

该写法会筛选出当前年、月的created_at记录,2月1日时只会统计2月的新增数据,结果为0。

方法2:从当月第一天零点开始统计

Card::make('Incidents this month', IncidentReport::where('created_at', '>=', now()->startOfMonth())
    ->count()),

now()->startOfMonth()会返回当前月份第一天的00:00:00,查询条件仅包含当月及之后的记录(即纯当月数据),完全符合你的需求。

额外排查建议

如果仍有异常,可打印查询语句确认条件是否正确:

$query = IncidentReport::where('created_at', '>=', now()->startOfMonth());
dd($query->toSql(), $query->getBindings());

同时确认项目时区配置是否正确,避免时区偏差导致统计范围错误,必要时可明确指定时区:

now('Asia/Shanghai')->startOfMonth()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:26:55