Laravel中如何获取近24小时/30天内创建的数据?附代码示例
在Laravel中筛选近24小时/30天的数据
嘿,这事儿不难!咱们只需要在你现有的Eloquent查询里,加上针对created_at字段的时间范围筛选就行。我把两种需求的修改方案都给你列出来:
1. 获取近24小时内创建的数据
直接用Laravel自带的Carbon时间工具,通过now()->subHours(24)得到24小时前的时间,然后筛选created_at大于等于这个时间的记录:
$last['last_trades'] = Credit::where('user_id', $user->id) ->where('description', '#1 Bonus Trade') ->where('currency_code', 'LTC') ->where('created_at', '>=', now()->subHours(24)) // 新增:筛选近24小时的数据 ->orderBy('created_at', 'DESC') ->limit(5) ->get();
如果你想更明确地指定时间范围(比如从24小时前到当前这一刻),也可以用whereBetween写法,效果完全一致:
->whereBetween('created_at', [now()->subHours(24), now()])
2. 获取近30天内创建的数据
逻辑和上面一样,只是把时间调整为30天前:
$last['last_trades'] = Credit::where('user_id', $user->id) ->where('description', '#1 Bonus Trade') ->where('currency_code', 'LTC') ->where('created_at', '>=', now()->subDays(30)) // 新增:筛选近30天的数据 ->orderBy('created_at', 'DESC') ->limit(5) ->get();
小提示
now()是Laravel封装的Carbon实例,会自动使用你配置的时区,不用手动处理时区问题~- 如果你的需求是“最近一个自然月”(比如从上个月今天到今天),可以换成
now()->subMonth(),不过subDays(30)更适合精确的30天滚动范围。
内容的提问来源于stack exchange,提问作者Lucas Zimmermann
相关产品推荐
相关产品推荐

