如何统计指定日期的所有MyPosts元素?解决Carbon时间匹配问题
解决Laravel中统计指定日期所有MyPosts记录的问题
你遇到的核心问题是:created_at字段存储的是包含时分秒的完整时间戳,而你原来的代码用了精确时间匹配——Carbon::now()->subDays(1)返回的是当前时间往前推24小时的具体时间(比如现在是2024-05-20 14:30,那就是2024-05-19 14:30),数据库里几乎不会有记录的created_at恰好等于这个时间,所以查不到数据。
下面是两种可靠的解决方案:
1. 用Laravel内置的whereDate方法(最简洁)
这个方法会自动忽略created_at的时间部分,只匹配日期:
// 统计昨天的所有记录 $count = MyPosts::whereDate('created_at', Carbon::yesterday())->count(); // 如果要统计任意指定日期(比如2024-05-19) $targetDate = Carbon::parse('2024-05-19'); $count = MyPosts::whereDate('created_at', $targetDate)->count();
2. 手动指定时间范围(更灵活)
如果你需要更精确的时间区间(比如某天的00:00:00到23:59:59),可以用whereBetween:
// 统计昨天的所有记录 $yesterdayStart = Carbon::yesterday()->startOfDay(); $yesterdayEnd = Carbon::yesterday()->endOfDay(); $count = MyPosts::whereBetween('created_at', [$yesterdayStart, $yesterdayEnd])->count(); // 统计任意指定日期的所有记录 $targetDate = Carbon::parse('2024-05-19'); $targetStart = $targetDate->startOfDay(); $targetEnd = $targetDate->endOfDay(); $count = MyPosts::whereBetween('created_at', [$targetStart, $targetEnd])->count();
两种方法都能准确统计指定日期内的所有MyPosts记录,根据你的需求选择即可。
内容的提问来源于stack exchange,提问作者MrBelongsTo
相关产品推荐
相关产品推荐

